我的操作栏中有一个 SearchView
。当用户搜索查询并按下键盘上的“Go”按钮时,搜索 Intent 会传递到我的 Activity ,但搜索字段会折叠并且查询文本会丢失。我怎样才能防止这种情况发生?我希望文本保留在搜索字段中,直到用户明确清除为止。
谢谢
最佳答案
您可以将搜索请求存储在字符串变量中或 shared Preferences 中当搜索事件发生时(setOnSearchClickListener)使用 getQuery() 单击“Go”按钮,然后将它们写回either as the Query (setQuery) or as a hint (setQueryHint) .
编辑(根据您可以在该答案下方阅读的问题)
如果每次搜索后都重新创建 Activity ,如何存储查询字符串?如果您的应用程序运行时有一些永久存在的服务,您可以将其存储在那里,但这并不是那么优雅。最简单的方法是使用 SharedPreferences 。这是一个持久(键、值)存储,您可以在整个应用程序中使用它来存储和检索值。
您使用
启动 SharedPreferenceSharedPreferences prefs = getSharedPreferences("mysharedprefenrences", 0);
字符串可以是任何你想要的。每当您使用相同的字符串在应用程序中创建 SharedPreferences-Object 时,您都可以再次访问这些值。
要获取字符串(例如您的搜索查询),请使用
String aString = prefs.getString("searchQuery", "")
如果尚未设置查询(在本例中为“”),则第二个字符串为默认值。
当 setOnSearchClickListener 生效后,您可以使用编辑器存储查询。
Editor editor = prefs.edit();
editor.putString("searchQuery", queryString);
editor.commit();
现在,下次创建 Activity 时,将找到您存储的字符串,而不是默认字符串。
关于java - 如何在搜索时将搜索到的文本保留在 SearchViews 文本字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215603/