从 BottomSheetDialogFragment 选择项目然后选择底部导航菜单后,搜索无法按预期工作

2023-12-23

我遇到了一个尴尬的情况,我两天来一直试图找到原因并解决它,但我失败了。

我先解释一下。

启动应用程序时recyclerView在“HomeFragment”中填充了从以下位置获取的数据Firestore。我在顶部的工具栏上有一个搜索栏,当我输入某些内容时,它会缩小搜索栏中的项目列表recyclerView。 我有一个FloatingActionButton这将带来一个BottomSheetDialogFragment包含项目类别。当我从中选择一个类别时,recyclerView“HomeFragment”中的 是根据所选类别填充的。到这里为止没有任何问题。

如果我在选择类别后进行搜索,它会毫无问题地缩小项目列表。当我从中选择“HomeFragment”时bottomNavigation,从选择类别后BottomSheetDialogFragment,搜索结果未显示。但是,如果我从bottomNavigation选择任何其他底部菜单项后,但不转到BottomSheetDialogFragment然后选择一个类别,那么搜索就没有问题了。仅当我选择类别然后通过点击底部菜单返回“HomeFragment”时才会发生这种情况。有人可以帮我找到并解决问题吗?

以下是我在“HomeFragment”中用于搜索的内容。

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    menu.clear() // THIS LINE OF CODE IS ADDED SO THAT WHEN WE SELECT A CATEGORY FROM THE BOTTOMSHEET THE MENU ITEMS WON'T DUPLICATE
    inflater.inflate(R.menu.home_menu, menu)
    super.onCreateOptionsMenu(menu, inflater)

    val item = menu.findItem(R.id.my_search_bar)
    val searchView = item?.actionView as SearchView

    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {

        override fun onQueryTextSubmit(query: String?): Boolean {
            srchTempProductsList.clear()
            if (query != null) {
                if (query.isNotEmpty()) {
                    srchProductsList.forEach {
                        if (it.label.toLowerCase(Locale.getDefault()).contains(query)) {
                            srchTempProductsList.add(it)
                        }
                        binding.rvHomeItems.adapter?.notifyDataSetChanged()
                    }
                    if (srchTempProductsList.size == 0) {
                        showCustomAlertDialog()
                    }
                } else {
                    srchTempProductsList.clear()
                    srchTempProductsList.addAll(srchProductsList)
                    binding.rvHomeItems.adapter?.notifyDataSetChanged()
                }
            }
            return false
        }

        override fun onQueryTextChange(newText: String?): Boolean {

            srchTempProductsList.clear()
            val searchText = newText!!.toLowerCase(Locale.getDefault())

            if (searchText.isNotEmpty()) {
                srchProductsList.forEach {
                    if (it.label.toLowerCase(Locale.getDefault()).contains(searchText)) {
                        srchTempProductsList.add(it)
                    }
                    binding.rvHomeItems.adapter?.notifyDataSetChanged()
                }

                if (srchTempProductsList.size == 0) {
                    showCustomAlertDialog()
                }

            } else {
                srchTempProductsList.clear()
                srchTempProductsList.addAll(srchProductsList)
                binding.rvHomeItems.adapter?.notifyDataSetChanged()
            }

            return false

        }
    })

}

我在“BottomSheetDialogFragment”中有以下内容将类别传递给“HomeFragment”

    categoryAdapter.setOnClickListener(object :HomeCategoryListAdapter.OnClickListener{
        override fun onClick(position: Int, category: Categories) {
            val myFragment = HomeFragment()
            val bundle = Bundle()
            bundle.putString("category", category.category)
            myFragment.arguments = bundle
            fragmentManager?.beginTransaction()?.replace(R.id.nav_host_fragment,myFragment)?.commit()
            dismiss()
        }
    })

以及以下内容中的onCreateView'HomeFragment' 的

    val bundle = this.arguments
    if (bundle!=null) {
        if (bundle.getString("category")!="All Products"){
            filterCategory = bundle.getString("category")
        }else{
            filterCategory =null
        }
    }

这就是我获取“HomeFragment”中的产品列表的方式

fun getProductList() {
    srchProductsList.clear()
    srchTempProductsList.clear()

    if (filterCategory!=null){
        mFireStore.collection("prods")
            .whereEqualTo("category",filterCategory)
            .get()
            .addOnCompleteListener {
                if (it.isSuccessful) {
                    for (document in it.result) {
                        val product = document.toObject(Product::class.java)
                        product.product_id = document.id
                        srchProductsList.add(product)
                    }
                } else {
                }
                srchTempProductsList.addAll(srchProductsList)
                listProductBasedOnView()
            }
            .addOnFailureListener {
                Log.d("Known Error", "This ....")
            }
    }else{

        mFireStore.collection("prods")
            .get()
            .addOnCompleteListener {
                if (it.isSuccessful) {
                    for (document in it.result) {
                        val product = document.toObject(Product::class.java)
                        product.product_id = document.id
                        srchProductsList.add(product)
                    }
                } else {
                }
                srchTempProductsList.addAll(srchProductsList)
                listProductBasedOnView()
            }
            .addOnFailureListener {
                Log.d("Known Error", "This ...")
            }
    }

}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 BottomSheetDialogFragment 选择项目然后选择底部导航菜单后,搜索无法按预期工作 的相关文章