我正在使用 DrawerLayout,每当它打开或关闭时,我都会使用 invalidateOptionsMenu()。问题是,在打开和关闭 DrawerLayout 后,SearchView 就停止工作了。
Class1:
private DrawerLayout DrawerLayout;
private ListView DrawerList;
private ActionBarDrawerToggle DrawerToggle;
private CharSequence DrawerTitle;
private CharSequence Title;
.....
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.menu, R.string.app_name, R.string.hello) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(Title);
invalidateOptionsMenu();
// onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(DrawerTitle);
invalidateOptionsMenu();
// onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(DrawerToggle);
SearchView定义了Class2:
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
getActivity().invalidateOptionsMenu();
// onPrepareOptionsMenu()
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.actionbar, menu);
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
}
两个类都没有定义onPrepareOptionsMenu()方法。
具体而言,以下内容无法正常工作:
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
adapter是ListView的适配器,getFilter方法在一个实现了Filterable接口的BaseAdapter类中。
onPrepareOptionsMenu
,似乎很重要。 - Eugen Pechanec