从 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 选择项目然后选择底部导航菜单后,搜索无法按预期工作 的相关文章

  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 将 CSV 复制到 Amazon RDS 托管的 Postgresql 数据库

    我有一个使用 Amazon 的 RDS 服务托管的数据库 我正在尝试编写一个 Web 服务来更新所述数据库 我遇到的问题是它不允许我使用 COPY 命令 因为我收到此错误 错误 必须是超级用户才能复制到文件或从文件复制 我正在使用我为数据库
  • Docker - 如何通过 API 将输入发送到程序

    我一直在使用 Docker 的远程 API 创建一个容器 在其中运行一个 Python 程序 附加到该容器并将写入 stdout 的输出流式传输到网络 现在 我希望我的 Python 程序接受来自 stdin 的用户输入 例如 import
  • 如何为所有用户安装 Anaconda python?

    Anaconda python 发行版 https store continuum io cshop anaconda 非常方便地部署科学计算环境 SCE 并根据需要切换python版本 默认情况下 安装会将 python 定位到 anac
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime
  • iOS 中是否需要 Google App Indexing SDK 才能使用 Google DeepLinking?

    我想用谷歌应用程序索引与我的网页和 iOS 应用程序 我支持通用链接 or 深层链接用谷歌术语 与苹果Search并相应地设置我的网页 From 谷歌文档 https developers google com app indexing i
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然
  • 使用部分字符串匹配进行 Firebase 查询[重复]

    这个问题在这里已经有答案了 假设我有一个简单的 firebase 实时数据库结构 其中关键是username其值为userid 现在我想搜索userid by username 如果用户名匹配 这很容易 但如何获得部分匹配的答案 更清楚地说
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • SSIS 包失败并出现“无法获取连接”错误

    我们有一个从 Web 服务启动的 SSIS 包 在开发环境中 一切正常 但在 QA 环境中 尝试运行包时出现以下错误 无法获取连接 ConnectionName 连接可能未正确配置 或者您可能没有正确的权限这个连接 连接使用 SQL 登录
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include
  • 没有 Neo4Django 的 Django 和 Neo4j

    我正在使用 Neo4j 以及 Postgres 构建一个 Django 应用程序 我发现这个 Django 集成称为新4django https github com scholrly neo4django 我想知道是否可以只使用neo4r
  • Cycle2 初始化事件未触发

    我使用 Cycle2 作为基本的轮播 我的幻灯片项目有时在其数据中包含一个 url 因此我必须使用 Cycle2 api 事件来使用该 url 当它存在时 我的问题是 虽然 cycle after 事件触发正常 但初始化事件都不会触发 因此
  • 令牌返回后,Google 操作和帐户关联失败

    尝试使用 OAuth2 授权代码流在 Web 模拟器中测试身份验证 https developers google com actions tools web simulator https developers google com ac
  • 如何让 webpack 和 iis express 协同工作?

    I have Angular 2 和 Webpack 2 入门 https github com qdouble angular webpack2 starter它通过 webpack dev server 在节点上运行 我如何使用 web

随机推荐

  • 无法粘贴到 MacVim 中

    我从 Vim 外部复制文本 其他应用程序中的 V 粘贴文本没有问题 在 MacVim 中 它不起作用 在插入模式下 什么也没有出现 在正常模式下 我得到E353 Nothing in register 发生这种情况时set clipboar
  • 为什么 AspectJ @Around 建议执行两次?

    我有以下 AspectJ 示例 它是作为 hello world 风格的概念证明而完成的 中的建议代码StyleAspect似乎执行了两次 即使实际代码在SomeClass仅执行一次 根据需要 这是代码 首先 一个名为 WithStyle
  • 从 Mozilla Firefox 重定向到 Android 应用程序 - 深层链接

    我使用意图过滤器来允许深度链接到我的应用程序的活动 就像下面给出的例子一样 https developer android com training app indexing deep linking html https develope
  • 从 jQuery 返回 PHP

    我想通过 jQuery 回显 HTML 下拉值
  • 实施 Spring-Social 记住我

    我有一个启用 Spring Security 的项目 我已经使用登录表单实现了 记住我 效果很好 但我在登录表单上也有来自 google facebook 的社交登录 效果很好 问题是他们不记得用户 有没有办法设置类似的 记住我 功能 我当
  • 回滚时,App 和 DB 哪个应该主动执行任务?

    MySql InnoDB 设置自动提交关闭并使用默认隔离级别 REPEATABLE READ 有两种场景 两个不同的事务 T1 和 T2 按以下时间顺序运行 1 time T1 T2 t1 update row 1 gt OK t2 upd
  • 使用 Gson 反序列化 Java 8 LocalDateTime

    我有带有 2014 03 10T18 46 40 000Z 格式的日期时间属性的 JSON 我想使用 Gson 将其反序列化为 java time LocalDateTime 字段 当我尝试反序列化时 出现错误 java lang Ille
  • 将 po 文件编译为 mo 的好处

    编译 GNU gettext 的好处和主要原因是什么 po 可移植对象 文件到 mo 机器对象 我看到很多程序正在读取 解析 po直接地 我没有使用 wordpress 但在他们的文档中它说 https codex wordpress or
  • github 52 周参与如何运作?

    我对我的 github 52 周参与图感到困惑 我在那里的大多数项目只有一位作者 我 然而 在 52 周的参与中 所有者的承诺 为零 尽管我所有的承诺都是由我自己完成的 我的页面 https github com yule https gi
  • Phonegap Pushnotification + node-gcm:群组通知

    我在 Node 应用程序中有这样的东西 var sender new gcm Sender XPTO var registrationIds whatever var message new gcm Message data avatar
  • Android 可绘制对象对于 API <23 显得拉伸,而对于 API 23 及更高版本则正确

    我目前正在为我的列表视图使用列表选择器 并使用图层列表创建它 这是我的 xml 代码
  • 在 matplotlib 中用两个 Y 轴(两个单位)绘制单个数据

    我正在尝试绘制单个时间序列 但想用左轴和右轴上的两个单位表示它 这是我到目前为止所做的 fig ax1 plt subplots t np arange 1 50 1 s1 np sin t 20000 40000 synthetic ts
  • POST 到 HTTPS 身份验证错误

    这是使用 C 控制台应用程序发布到 https 站点的简单帖子 我也对 Web 服务使用了相同的内容 当我运行它时它冻结了 下载了 fiddler 并在 身份验证 选项卡中我看到 不存在代理验证标头 不存在 WWW 验证标头 早些时候我使用
  • Objective-C 获取可为空 bool 的方法是什么?

    我应该如何获取一个可以在 Objective C 中分配 true false 和 nil 的 bool 值 Objective C 这样做的方式是什么 很像 C 的 Nullable 我希望能够使用 nil 值来表示未定义 An NSNu
  • 使用Gmail API发送电子邮件,在正文中编码希腊字符

    我正在更新一个用于发送电子邮件的应用程序 以使用 GMAIL API 而不是 SMTP 我遇到电子邮件编码问题 主题已按其应有的方式显示 但主体未正确显示 以下是收到的邮件截图 我用来发送电子邮件的代码 public bool SendMa
  • 如何自定义列系列中的列宽?

    我想知道是否可以自定义条形图的列宽 Regards Franco 简短的回答 是的 请参阅this http lvcharts net App documentation beta LiveCharts Wpf ColumnSeries 默
  • 获取动态添加文本框的值

    我有两个文件test py and test kv在测试 kv中text Add More 添加行动态垂直位置 我正在 py 中创建动态 id self add widget Row button text str self row cou
  • 如何确定鼠标事件附近的 SVG 元素?

    我正在使用 D3 JavaScript 库构建 SVG 图表并向其分配鼠标事件 SVG 图可能很复杂 由许多任意路径元素组成 我一直在努力找出一种方法来确定鼠标悬停事件上的所有附近元素 因此 例如 当鼠标光标在图表上移动时 我可以确定距离光
  • 在 Git 分支名称中使用斜杠字符

    我很确定我在一个流行的 Git 项目中的某个地方看到分支有类似 feature xyz 的模式 但是 当我尝试使用斜杠字符创建分支时 出现错误 git branch labs feature error unable to resolve
  • 从 BottomSheetDialogFragment 选择项目然后选择底部导航菜单后,搜索无法按预期工作

    我遇到了一个尴尬的情况 我两天来一直试图找到原因并解决它 但我失败了 我先解释一下 启动应用程序时recyclerView在 HomeFragment 中填充了从以下位置获取的数据Firestore 我在顶部的工具栏上有一个搜索栏 当我输入