0

我的操作栏中有一个SearchView。当用户搜索查询并按下键盘上的“开始”按钮时,搜索意图被传递给我的活动,但搜索字段折叠并且查询文本丢失。我怎样才能防止这种情况发生?我希望文本保留在搜索字段中,直到用户明确清除。

谢谢

4

2 回答 2

2

当搜索事件发生时(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();

现在下次创建活动时,将找到您存储的字符串而不是默认字符串。

于 2012-08-31T12:55:46.747 回答
0

我的解决方案非常简单。显然,我没有android:launchMode为活动正确设置。理想情况下,提供搜索功能的活动应该是一个单一的顶部,这样用户就不必在单击“返回”按钮时向后浏览所有先前的搜索。我的不是。因此,每次搜索时,都会启动一个新的搜索活动实例并将其添加到视图堆栈中。

我在正确的活动下将此添加到我的清单文件中。

android:launchMode="singleTop"
于 2012-09-08T13:44:27.923 回答