我的操作栏中有SearchView
。当用户搜索查询并按下键盘上的“开始”按钮时,搜索意图将传递给我的活动,但搜索字段会折叠,查询文本将丢失。我怎样才能防止这种情况发生?我希望文本保留在搜索字段中,直到用户明确清除为止。
由于
答案 0 :(得分:2)
当搜索事件发生时(setOnSearchClickListener)使用getQuery()单击“Go”按钮时,您可以将搜索请求存储在String变量或shared Preferences中,然后将其写回{ {3}}
修改(根据您可以在此答案下方阅读的问题)
如果在每次搜索后重新创建活动,如何存储查询字符串?如果你在应用程序的运行时有一些持久的服务,你可以将它存储在那里,但那不是那么优雅。最简单的方法是使用either as the Query (setQuery) or as a hint (setQueryHint)。这是一个持久性(密钥,值)存储,您可以在整个应用程序中使用它来存储和检索值。
使用
启动SharedPreferenceSharedPreferences 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"