我的操作栏中有一个SearchView
。当用户搜索查询并按下键盘上的“开始”按钮时,搜索意图被传递给我的活动,但搜索字段折叠并且查询文本丢失。我怎样才能防止这种情况发生?我希望文本保留在搜索字段中,直到用户明确清除。
谢谢
当搜索事件发生时(setOnSearchClickListener)使用getQuery()单击“Go”按钮时,您可以将搜索请求存储在字符串变量或共享首选项中,然后将它们作为查询(setQuery)写回或作为提示 (setQueryHint)。
编辑(根据您可以在此答案下方阅读的问题)
如果在每次搜索后重新创建活动,您如何存储查询字符串?如果您有一些在应用程序运行时持久的服务,您可以将它存储在那里,但这并不是那么优雅。最简单的方法是使用SharedPreferences。这是一个持久(键、值)存储,您可以在整个应用程序中使用它来存储和检索值。
您启动 SharedPreference 与
SharedPreferences prefs = getSharedPreferences("mysharedprefenrences", 0);
字符串可以是任何你想要的。每当您在应用程序中使用相同的字符串创建 SharedPreferences-Object 时,您将再次访问这些值。
要获取字符串,例如您的搜索查询,请使用
String aString = prefs.getString("searchQuery", "")
如果尚未设置查询(在本例中为“”),则第二个字符串为默认值。
执行 setOnSearchClickListener 后,您可以使用编辑器存储查询。
Editor editor = prefs.edit();
editor.putString("searchQuery", queryString);
editor.commit();
现在下次创建活动时,将找到您存储的字符串而不是默认字符串。
我的解决方案非常简单。显然,我没有android:launchMode
为活动正确设置。理想情况下,提供搜索功能的活动应该是一个单一的顶部,这样用户就不必在单击“返回”按钮时向后浏览所有先前的搜索。我的不是。因此,每次搜索时,都会启动一个新的搜索活动实例并将其添加到视图堆栈中。
我在正确的活动下将此添加到我的清单文件中。
android:launchMode="singleTop"