【发布时间】:2014-04-25 06:06:02
【问题描述】:
我的ActionBar 中有一个可折叠的SearchView。执行搜索后,关联的ListView 将被过滤以仅显示匹配项。在该状态下,SearchView 仍处于展开状态并显示搜索字符串。如果用户关闭SearchView,我删除过滤器。
我想恢复搜索状态,例如在配置更改或当我从另一个活动返回时活动被破坏。
我在onRestoreInstanceState() 中恢复查询字符串,如果在onCreateOptionsMenu() 中找到查询字符串,我调用
searchView.setQuery(query, true);
以便再次执行查询。事实证明,这比立即应用查询过滤器onRestoreInstanceState() 更好。对于后者,列表很快就会显示为未经过滤的,然后才会再次应用查询。 setQuery() 不会发生这种情况。
问题:执行查询并过滤列表,但搜索视图仍处于折叠状态。因此,用户不能使用搜索视图来删除过滤器或应用另一个查询。
在onCreateOptionsMenu()中我可以确定搜索项和搜索视图存在,因此我可以调用searchItem.expandActionView()。奇怪的是,只有这样才能真正扩展ActionView - 调用setIconified(false) 不会扩展视图,即使连续调用两次也不会。
如果我在调用setQuery() 之前使用expandActionView(),则SearchView 会打开并显示文本(否则expandActionView() 会清空SearchView)。
不幸的是,expandActionView() 有一个副作用:建议列表也会显示并且键盘会打开。
我可以使用searchView.clearFocus() 隐藏键盘。所以剩下的问题是建议列表。如何关闭包含文本的 SearchView 上的打开建议列表?
不知道有没有更好的方法来恢复操作栏中的搜索视图,并且没有那么多副作用。
【问题讨论】:
-
见this可能对你有帮助
-
这种情况不同,搜索视图在 onRestoreInstanceState 中可用。在我的情况下,搜索视图在操作栏中,在 onRestoreInstanceState 中不可用。
-
expandActionView 似乎由于某种原因导致当前查询字符串被重置为空。如果我首先展开操作视图,然后调用 setQuery,查询将打开并显示文本。现在剩下的问题是建议列表显示并且键盘是打开的。
-
试试this
-
感谢您的指点。我不确定你所说的“这个”到底是什么意思。它确认 expandActionView 清除了查询字符串,并且答案包含一个自定义 searchView,其文本在折叠/展开时保留。就我而言,问题是在配置更改后恢复扩展的 searchView。
标签: android searchview