You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

选择BottomSheetDialogFragment分类后点击底部导航HomeFragment搜索失效求助

问题根因

  • 分类选择逻辑错误:BottomSheet中选中分类时手动创建了新的HomeFragment实例替换当前页面,和底部导航组件维护的HomeFragment实例完全脱节。点击底部导航的Home选项时,系统会恢复导航组件管理的原始HomeFragment实例,该实例要么没有携带选中的分类参数,要么没有执行过数据拉取逻辑,导致搜索依赖的srchProductsList数据源为空,自然无法返回搜索结果。
  • 数据加载时机不合理:getProductList大概率仅在Fragment首次创建的生命周期(如onViewCreated)中执行,当Fragment从其他底部tab切回显示时,不会重新触发数据拉取,进一步导致数据源异常。

修复方案

1. 修正分类参数传递逻辑

不要手动创建HomeFragment实例替换,改为通过Fragment Result API通知已存在的HomeFragment更新分类:

// BottomSheetDialogFragment分类点击逻辑修改
categoryAdapter.setOnClickListener(object :HomeCategoryListAdapter.OnClickListener{
    override fun onClick(position: Int, category: Categories) {
        val result = Bundle()
        result.putString("selectedCategory", if (category.category == "All Products") null else category.category)
        parentFragmentManager.setFragmentResult("category_select_key", result)
        dismiss()
    }
})

// HomeFragment的onViewCreated中监听分类选择结果
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // 监听分类选择结果
    parentFragmentManager.setFragmentResultListener("category_select_key", viewLifecycleOwner) { _, bundle ->
        filterCategory = bundle.getString("selectedCategory")
        getProductList() // 收到分类后重新拉取对应商品数据
    }
    // 其余原有初始化逻辑
}

2. 优化数据加载时机

确保HomeFragment切回前台时能正确加载对应数据:

override fun onResume() {
    super.onResume()
    // 若有需要可以加判断:当前分类和上次加载的分类一致时跳过拉取,减少请求次数
    getProductList()
}

3. 可选优化搜索性能

将列表刷新逻辑移到循环外,避免遍历每个商品都触发不必要的页面刷新:

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.isEmpty()) {
            showCustomAlertDialog()
        }
    } else {
        srchTempProductsList.clear()
        srchTempProductsList.addAll(srchProductsList)
        binding.rvHomeItems.adapter?.notifyDataSetChanged()
    }
    return false
}
// onQueryTextSubmit方法也做同样的循环外刷新修改即可

内容的提问来源于stack exchange,提问作者Codist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:06