我有2个activites:第一, HomepageActiviy
,有使用另一项活动,搜索数据的搜索小工具SearchActivity
。
当我回到离我想要做的就是SearchActiviy
到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();
}
}
如果是晕倒小部件也显示,在插件的文本还记得搜索文本(我之后重新打开窗口小部件)。 如何重置widget的文字?
谢谢你的帮助! ;)
您也可以尝试以下操作:
searchView.setQuery("", false);
searchView.clearFocus();
这是魔术
searchView.setQuery( “”,假); //清除文本
searchView.setIconified(真); //关闭搜索编辑器并重新进行搜索图标
在HomepageActivity插入的OnCreate函数后功能的onSaveInstanceState
这个功能将触发每次你打开一个新的活动, 开辟新的活动的时候,才重新搜索控件的值
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
searchView.setQuery("", false);
searchView.setIconified(true);
}
这为我工作:
首先,我声明在活动的顶部的菜单项变量:
private MenuItem mSearchMenuItem;
我定义在OnCreateOptionsMenu()可变:
mSearchMenuItem = menu.findItem(R.id.action_search);
我宣布invalidateOptionsMenu()中的onResume():
@Override
protected void onResume() {
invalidateOptionsMenu();
super.onResume();
}
最后,我在onPrepareOptionsMenu上的菜单项称为collapseActionView()()。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mSearchMenuItem.collapseActionView();
return super.onPrepareOptionsMenu(menu);
}
searchView.setQuery("", false);
searchView.setIconified(false);
我也有这个问题,它的工作,如果我把它放在onPrepareOptionsMenu。
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setQuery("", false);
// rest of code...
}
只是发现了一个丑陋的方式,使其工作(阅读评论,看看差异):
public class HomepageActivity extends Activity {
// Declaring SearchView as an instance object
private SearchView searchView;
@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);
// Using instance var instead of local var
searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();
ComponentName component = new ComponentName(this, SearchActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(component));
searchView.setIconifiedByDefault(true);
// Setting query is not anymore required
//searchView.setQuery("", false);
}
return super.onCreateOptionsMenu(menu);
}
[…]
@TargetApi(11)
@Override
protected void onRestart() {
super.onRestart();
// Do not need to recreate menu
/*if(Build.VERSION.SDK_INT >= 11)
invalidateOptionsMenu();*/
if(Build.VERSION.SDK_INT >= 11) {
// Calling twice: first empty text field, second iconify the view
searchView.setIconified(true);
searchView.setIconified(true);
}
launchAsynchronousImageDownload();
}
}
它很丑陋,我认为,如果有人为一个更好的主意,只是告诉我:)