java - 如何在搜索时将搜索到的文本保留在 SearchViews 文本字段中?

标签 java android

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

谢谢

最佳答案

您可以将搜索请求存储在字符串变量中或 shared Preferences 中当搜索事件发生时(setOnSearchClickListener)使用 getQuery() 单击“Go”按钮,然后将它们写回either as the Query (setQuery) or as a hint (setQueryHint) .

编辑(根据您可以在该答案下方阅读的问题)

如果每次搜索后都重新创建 Activity ,如何存储查询字符串?如果您的应用程序运行时有一些永久存在的服务,您可以将其存储在那里,但这并不是那么优雅。最简单的方法是使用 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();

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

关于java - 如何在搜索时将搜索到的文本保留在 SearchViews 文本字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215603/

相关文章:

java - Spring MVC RestController 不明确的 PathVariable 映射

java - Hibernate级联子对象不在查找表中存储父表的ID

android - 如何在线程内使用 Cursor 进行查询? (安卓)

javascript - 登录重定向后的 Android 强制门户

java - Growl转发到Java服务器

java - 创建具有不同颜色的颜色数组

javascript - 聆听点击和拖动的值并相应地运行

android - 用于上传图像/视频并通过智能手机应用程序查看的物联网 API

android - 如何在 Android View 中从 "wrap_content"中排除项目?

java - 如何获取 Java 类路径分隔符?