如何在搜索的SearchViews文本字段中保留搜索文本?

时间:2012-08-31 12:41:22

标签: java android

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

由于

2 个答案:

答案 0 :(得分:2)

当搜索事件发生时(setOnSearchClickListener)使用getQuery()单击“Go”按钮时,您可以将搜索请求存储在String变量或shared Preferences中,然后将其写回{ {3}}

修改(根据您可以在此答案下方阅读的问题)

如果在每次搜索后重新创建活动,如何存储查询字符串?如果你在应用程序的运行时有一些持久的服务,你可以将它存储在那里,但那不是那么优雅。最简单的方法是使用either as the Query (setQuery) or as a hint (setQueryHint)。这是一个持久性(密钥,值)存储,您可以在整个应用程序中使用它来存储和检索值。

使用

启动SharedPreference
SharedPreferences prefs = getSharedPreferences("mysharedprefenrences", 0);

String可以是你想要的任何东西。每当您使用相同的String在应用程序中创建SharedPreferences-Object时,您将再次访问这些值。

要获取字符串,请使用

String aString = prefs.getString("searchQuery", "")

第二个String是默认值,如果查询尚未设置(在本例中为“”)。

当执行setOnSearchClickListener时,您可以使用编辑器存储查询。

Editor editor = prefs.edit();
editor.putString("searchQuery", queryString);
editor.commit();

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

答案 1 :(得分:0)

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

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

android:launchMode="singleTop"