Kotlin高仿微信-第52篇-搜索好友
创始人
2024-03-12 07:25:27

  Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。

Kotlin高仿微信-项目实践58篇,点击查看详情

效果图:

实现代码:




/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/4/21 21:18* Description : 根据账户搜索用户*/
class SearchFriendsFragment : BaseDataBindingFragment() {override fun getLayoutRes() = R.layout.wc_fragment_contacts_searchprivate val xmppViewModel : XmppViewModel by viewModels()private val userViewModel : UserViewModel by viewModels()private val contactViewModel : ContactsViewModel by viewModels()private var adapter : SearchContactsAdapter? = null//好友列表private var contactsList : MutableList? = nullprivate var navController : NavController? = nulloverride fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)super.builder().setTitleContent("")navController = findNavController()contacts_search_cancel.setOnClickListener {Navigation.findNavController(it).popBackStack()}var account = DataStoreUtils.getAccount()contacts_search_result_layout.setOnClickListener {TagUtils.d("搜索查询:${contacts_search_phone.text.toString()}")//xmppViewModel.searchUserByName(contacts_search_phone.text.toString())userViewModel.getUserLikeAccount(account, contacts_search_phone.text.toString())}contacts_search_phone.addTextChangedListener(object : TextWatcher{override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {//TagUtils.d("onTextChanged ${s}, , count = ${count}, length = ${s?.length}")if(s?.length!! > 0){var result = getString(R.string.wc_search_friend_tips, s)contacts_search_result_layout.visibility = View.VISIBLEcontacts_search_result_txt.text = result} else {contacts_search_result_layout.visibility = View.GONEcontacts_search_recycler_view.visibility = View.GONE}}override fun afterTextChanged(s: Editable?) {}})userViewModel.getUserListLiveData.observe(viewLifecycleOwner){if(it == null || it.size < 1){ToastUtils.makeText(R.string.search_list_empty)} else {contacts_search_recycler_view.visibility = View.VISIBLEadapter?.refresh(it)}}contactViewModel.getContactsList(account)contactViewModel.contactsListLiveData.observe(viewLifecycleOwner){contactsList = it}/*xmppViewModel.userListDataLiveData.observe(viewLifecycleOwner){contacts_search_recycler_view.visibility = View.VISIBLEadapter?.refresh(it)}*/adapter = SearchContactsAdapter()var linearLayoutManager = LinearLayoutManager(activity)linearLayoutManager.orientation = LinearLayoutManager.VERTICALcontacts_search_recycler_view.layoutManager = linearLayoutManagercontacts_search_recycler_view.adapter = adapteradapter?.setOnItemClickInterface(object : SearchContactsAdapter.OnItemClickInterface{override fun onItemClick(userBean: UserBean) {SoftInputUtils.hideSoftInput(contacts_search_result_layout)navController?.popBackStack(R.id.nav_contacts_add_friends, true)if(isFriend(userBean.account)) {//如果是好友,直接跳转到聊天页面var bundle = bundleOf(ChatFragment.USER_ID to userBean.account)navController?.navigate(R.id.nav_chat, bundle)} else {val bundle = bundleOf("userbean" to userBean)navController?.navigate(R.id.action_contacts_search_friends_details, bundle)}}})}private fun isFriend(searchAccount : String) : Boolean{var resultList = contactsList?.filter {it.toAccount.equals(searchAccount)}return resultList?.size!! > 0}}

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/4/22 17:51* Description :*/
class SearchContactsAdapter : RecyclerView.Adapter(){private var userList = ArrayList()private var onItemClickInterface :OnItemClickInterface? = nullfun setOnItemClickInterface(onItemClickInterface :OnItemClickInterface?){this.onItemClickInterface = onItemClickInterface}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchViewHolder {var view = LayoutInflater.from(parent.context).inflate(R.layout.wc_fragment_contacts_search_item, parent, false)return SearchViewHolder(view)}override fun onBindViewHolder(holder: SearchViewHolder, position: Int) {var userBean = userList.get(position)holder.account.text = BaseUtils.getString(R.string.wc_search_friend_account, userBean.account)holder.account.setOnClickListener {onItemClickInterface?.onItemClick(userBean)}}fun refresh(userList : ArrayList) {if(userList == null || userList.size == 0){this.userList = ArrayList()} else {this.userList = userList}notifyDataSetChanged()}override fun getItemCount(): Int  = userList?.sizeclass SearchViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {var account = itemView.findViewById(R.id.contacts_search_item_account)}interface OnItemClickInterface{abstract fun onItemClick(userBean: UserBean)}
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...