Java 重置搜索小部件(SearchView)值
我有两个活动:第一个,Java 重置搜索小部件(SearchView)值,java,android,kotlin,android-widget,Java,Android,Kotlin,Android Widget,我有两个活动:第一个,HomepageActiviy,有一个搜索小部件,可以使用另一个活动搜索数据,SearchActivity 我想做的是,当我从searchActivity返回到HomepageActivity时,搜索小部件会折叠并显示一个空文本 我试着做了以下几件事: public class HomepageActivity extends Activity { @TargetApi(11) @Override public boolean onCreateOpt
HomepageActiviy
,有一个搜索小部件,可以使用另一个活动搜索数据,SearchActivity
我想做的是,当我从searchActivity
返回到HomepageActivity
时,搜索小部件会折叠并显示一个空文本
我试着做了以下几件事:
public class HomepageActivity extends Activity {
@TargetApi(11)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.projectslist, menu);
if(Build.VERSION.SDK_INT >= 11) {
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();
ComponentName component = new ComponentName(this, SearchActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(component));
searchView.setIconifiedByDefault(true);
searchView.setQuery("", false);
}
return super.onCreateOptionsMenu(menu);
}
[…]
@TargetApi(11)
@Override
protected void onRestart() {
super.onRestart();
if(Build.VERSION.SDK_INT >= 11)
invalidateOptionsMenu();
launchAsynchronousImageDownload();
}
}
如果小部件显示为折叠状态,小部件中的文本仍然记得搜索到的文本(在我重新打开小部件后)。
如何重置小部件的文本
谢谢你的帮助!;) 刚刚找到了一个丑陋的方法让它发挥作用(阅读评论以查看差异):
我认为这很难看,所以如果有人认为这是一个更好的主意,请告诉我:)你也可以尝试以下方法:
searchView.setQuery("", false);
searchView.clearFocus();
我也有这个问题,如果我把它放在PrepareOptions功能表中,它就会起作用
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setQuery("", false);
// rest of code...
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mSearchMenuItem.collapseActionView();
return super.onPrepareOptionsMenu(menu);
}
这就是魔法
searchView.setQuery(“,false)代码>//清除文本
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
searchView.setQuery("", false);
searchView.setIconified(true);
}
searchView.setIconified(true)代码>//关闭搜索编辑器并再次设置搜索图标
在主页活动中,在oncreate函数之后插入onSaveInstanceState函数
此函数将在每次打开新活动时触发,
在打开新活动之前,它将重置搜索小部件的值
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
searchView.setQuery("", false);
searchView.setIconified(true);
}
这对我很有用:
首先,我在活动顶部声明了菜单项变量:
private MenuItem mSearchMenuItem;
我在onCreateOptions菜单()中定义了变量:
我在onResume()中声明了InvalidateOptions菜单():
最后,我在onPrepareOptions菜单()中的菜单项上调用了collapseActionView()
科特林
这是一个更干净的解决方案,它修复了以下问题:
searchView.setQuery("", false);
searchView.clearFocus();
屏幕旋转后显示过滤列表的问题
当用户切换到其他应用程序并返回时显示筛选列表的问题
用户返回时搜索菜单向左移动的问题
如果你是无效的,不需要图标化,它是自动完成的
确保将YourActivity
更改为包含片段的活动名称。hello@kyriog。。虽然我回答得太晚了。。但我也有同样的问题。在onRestart()方法中,我首先清空文本字段,然后将视图图标化。它解决了我的问题,无需调用setIconified()两次<代码>searchView.setQuery(“,false)代码>searchView.setIconified(true)代码>我在那里有混乱的searchView.SetIconnified(真)@TarekEl MallahSetIconnified
将视图缩小为图标。仅在尝试清除查询时,它既不是必需的,也不是缺少的。在我看来,它提供了最好的结果。将searchView设置为图标化并清除其焦点将使搜索图标向左移动,而不是像从未单击过一样将其完全清除。
@Override
protected void onResume() {
invalidateOptionsMenu();
super.onResume();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mSearchMenuItem.collapseActionView();
return super.onPrepareOptionsMenu(menu);
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
searchView.setQuery("", false)
(activity as YourActivity).invalidateOptionsMenu()
}