我添加了搜索菜单项来过滤我的列表。过滤和重置过滤器一切正常。 但是当用户单击后退按钮时,我找不到重置过滤器的方法。实际上,当用户在搜索字段中添加一些文本时,第一次后退单击将隐藏键盘,第二次单击将折叠搜索字段并删除我的搜索文本......但列表仍然被过滤。 我应该怎么做才能重置列表?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_menu, menu);
searchMenuItem = menu.findItem(R.id.action_search);
SearchView mSearchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
if (mSearchView != null) {
mSearchView.setIconifiedByDefault(true);
mSearchView.setOnQueryTextListener(this);
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onQueryTextChange(String s) {
refreshSearch(s);
return false;
}
private void refreshSearch(String s) {
FragmentManager fm = getSupportFragmentManager();
MyListFragment listFragment = (MyListFragment)fm.getFragments().get(0);
MyArrayAdapter arrayAdapter = (MyArrayAdapter)listFragment.getListAdapter();
arrayAdapter.getFilter().filter(s);
}
通过添加一些额外的代码来编辑我的问题,这可能有助于了解原因
@Override
public boolean onQueryTextSubmit(String s) {
hideKeyboard();
return false;
}
@Override
public boolean onQueryTextChange(String s) {
refreshSearch(s);
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
return true;
default:
return false; //return super.onOptionsItemSelected(item);
}
}
最佳答案
我通过这样做解决了问题:
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
refreshSearch("");
return true;
}
});
关于java - 单击返回时在 SearchView 中重置搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23843910/