我的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
。这是堆栈跟踪发生时的图像:
这会清除ViewModel中的过滤器,当用户导航回RecyclerView片段时,所有未过滤的项目都会再次显示。
我可以手动将搜索查询存储在
onDestroyView
,然后在中恢复它
onCreateOptionsMenu
但随后RecyclerView将显示从完整列表到过滤列表的可见动画,这非常令人困惑。相反,RecyclerView在返回时应该保持其状态。
有没有办法让SearchView在折叠时不发送空字符串?