代码之家  ›  专栏  ›  技术社区  ›  Florian Walther

导航到另一个片段时,如何保留ActionBar的搜索视图?

  •  0
  • Florian Walther  · 技术社区  · 4 年前

    我的RecyclerView可以通过片段的ActionBar中的SearchView进行过滤:

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.menu_fragment_tasks, menu)
    
        val searchItem = menu.findItem(R.id.action_search)
        val searchView = searchItem.actionView as SearchView
    
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String?): Boolean {
                return true
            }
    
            override fun onQueryTextChange(newText: String?): Boolean {
                viewModel.setSearchQuery(newText.orEmpty())
                return true
            }
        })
    }
    

    问题是,当用户现在导航到另一个片段时,此SearchView会折叠,这似乎会向发送一个空字符串 onQueryTextChange 。这是堆栈跟踪发生时的图像:

    enter image description here

    这会清除ViewModel中的过滤器,当用户导航回RecyclerView片段时,所有未过滤的项目都会再次显示。

    我可以手动将搜索查询存储在 onDestroyView ,然后在中恢复它 onCreateOptionsMenu 但随后RecyclerView将显示从完整列表到过滤列表的可见动画,这非常令人困惑。相反,RecyclerView在返回时应该保持其状态。

    有没有办法让SearchView在折叠时不发送空字符串?

    0 回复  |  直到 4 年前