繁体   English   中英

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

[英]How do I persist searched text in the SearchViews text field on search?

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

谢谢

当搜索事件发生时(setOnSearchClickListener)使用getQuery()单击“Go”按钮时,可以将搜索请求存储在String变量或共享Preferences中 ,然后将它们作为Query(setQuery)写回或者作为提示(setQueryHint)

编辑 (基于问题,您可以在下面的答案中阅读)

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

您启动SharedPreference

SharedPreferences prefs = getSharedPreferences("mysharedprefenrences", 0);

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

要获取字符串,请使用搜索查询

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

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

在执行setOnSearchClickListener时,您可以使用编辑器存储Query。

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

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

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

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

android:launchMode="singleTop"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM