SearchView 因页面更改而取消,但未正确清除

SearchView cancels with page change but doesn't clear properly

我有一个片段寻呼机,可以在相同 Fragment 的实例之间寻呼。在这些片段之上,通过应用栏中的 SearchView 实现搜索功能。用户应该能够在每个片段中单独搜索。

搜索功能过滤显示当前项目的ArrayList。大多数搜索过滤器功能都按预期工作,但我 运行 遇到这个问题:

当用户正在搜索然后滑动到下一页时,搜索栏(如预期的那样)消失,但键盘保留在屏幕上。这意味着搜索未正确清除和取消。返回到上一个视图也显示过滤器仍然处于活动状态。用户需要重新启动搜索进程然后取消它才能再次正确查看列表。

问题在this video中得到了证明。

有什么方法可以避免这个问题?我目前正在考虑两种选择:

1 - 页面切换时,清除搜索功能

这确实有效,但是它不会自动摆脱键盘,也不会处理其他问题,例如在搜索处于活动状态时切换到另一个 Activity

2 - 找出一种通知搜索已取消的方法

这将是最佳方式,但我还没有弄清楚该怎么做。可悲的是,SearchViewOnCloseListener 仅对关闭 SearchView 的常规方式作出反应,所以我不能使用它。

在此先感谢您的帮助,期待您的建议。

所以我没有找到解决办法,但我确实设法在取消视图时获得了一个事件。按照 .

的建议,通过添加 OnAttachStateChangeListener 附加或分离搜索下拉菜单时,我收到了事件

这样我就可以在取消视图时清除应用的搜索。幸运的是,当正确输入搜索时,这也不会清除视图!它仅在 SearchView 正确离开视图时调用。

searchView.addOnAttachStateChangeListener(object: View.OnAttachStateChangeListener {
    override fun onViewAttachedToWindow(p0: View?) {
        // the view was expanded
    }

    override fun onViewDetachedFromWindow(p0: View?) {
        // the view was collapsed
        searchView.clearFocus()
        DataManager.clearSearch()
    }
})