Android SearchView会随着页面更改而取消,但不会';我不能正常清除

Android SearchView会随着页面更改而取消,但不会';我不能正常清除,android,android-viewpager,searchview,fragmentpageradapter,Android,Android Viewpager,Searchview,Fragmentpageradapter,我有一个片段寻呼机,可以在相同片段的实例之间进行分页。在这些片段之上,搜索功能通过应用程序栏中的SearchView实现。用户应该能够在每个片段中单独搜索 搜索功能过滤显示当前项目的ArrayList。大多数搜索筛选器功能都按预期工作,但我遇到了以下问题: 当用户正在搜索,然后滑动到下一页时,搜索栏(如预期)消失,但键盘仍在屏幕上。这意味着搜索未正确清除和取消。返回上一个视图还显示过滤器仍然处于活动状态。用户需要重新启动搜索过程,然后取消搜索以再次正确查看列表 该问题在中得到了演示 有什么办法可

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

搜索功能过滤显示当前项目的
ArrayList
。大多数搜索筛选器功能都按预期工作,但我遇到了以下问题:

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

该问题在中得到了演示

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

1-在页面更改时,清除搜索功能

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

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

这将是最佳的方式,但我还没有想出如何做到这一点。遗憾的是,
SearchView
OnCloseListener
只对关闭
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()
    }
})