SearchView随页面更改而取消,但无法正确清除

时间:2018-12-22 23:38:34

标签: android android-viewpager searchview fragmentpageradapter

我有一个片段寻呼机,可在同一Fragment的实例之间进行寻呼。在这些片段之上,通过应用栏中的SearchView实现了搜索功能。用户应该能够分别在这些片段中进行搜索。

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

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

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

有什么方法可以解决此问题?我目前正在考虑两个选择:

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

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

2-找出通知搜索已取消的方式

这是最佳方法,但是我还没有弄清楚该怎么做。可悲的是,SearchView的{​​{1}}只对关闭OnCloseListener的常规方式起反应,所以我不能使用它。

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

1 个答案:

答案 0 :(得分:0)

所以我没有找出解决办法,但是当视图取消时,我确实设法得到了一个事件。根据{{​​3}}的建议,通过添加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()
    }
})