我的片段中有列表,MainActivity中有NavigationDrawer。从NavigationDrawer我正在调用该片段。当我滚动一点并再次打开NavigationDrawer时,列表刷新并从顶部开始。 (即使导航抽屉打开,它仍然应该处于相同的位置)我认为这主要是因为onDrawerOpened我有supportInvalidateOptionsMenu();
重启所有内容。 (当我评论该行时一切正常,但ActionBar图标仍然存在)。我必须调用它,因为onDrawerOpen我需要隐藏ActionBar中的图标。
这就是我设置ActionBarToggle的方法(我在mDrawerLayout.setDrawerListener(mDrawerToggle);
之前在onCreate方法中调用此方法):
private void setActionBarDrawerToggle(){
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.app_name,
R.string.app_name
) {
public void onDrawerClosed(View view) {
getSupportActionBar().setTitle(mTitle);
supportInvalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
View view = getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
supportInvalidateOptionsMenu();
getSupportActionBar().setTitle(mDrawerTitle);
}
};
}
这是onPrepareOptionsMenu:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
switch (location) {
case "eat":
menu.findItem(R.id.maps).setVisible(!drawerOpen);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
menu.findItem(R.id.sort_by).setVisible(!drawerOpen);
menu.findItem(R.id.working_cafes).setVisible(!drawerOpen);
menu.findItem(R.id.today).setVisible(false);
menu.findItem(R.id.directions_bus).setVisible(false);
break;
case "contest":
case "other":
menu.findItem(R.id.maps).setVisible(false);
menu.findItem(R.id.action_search).setVisible(false);
menu.findItem(R.id.sort_by).setVisible(false);
menu.findItem(R.id.today).setVisible(false);
menu.findItem(R.id.directions_bus).setVisible(false);
menu.findItem(R.id.working_cafes).setVisible(false);
break;
case "public":
menu.findItem(R.id.maps).setVisible(!drawerOpen);
menu.findItem(R.id.action_search).setVisible(false);
menu.findItem(R.id.sort_by).setVisible(false);
menu.findItem(R.id.today).setVisible(false);
menu.findItem(R.id.directions_bus).setVisible(!drawerOpen);
menu.findItem(R.id.working_cafes).setVisible(false);
break;
case "one_day":
menu.findItem(R.id.maps).setVisible(!drawerOpen);
menu.findItem(R.id.action_search).setVisible(false);
menu.findItem(R.id.sort_by).setVisible(false);
menu.findItem(R.id.today).setVisible(false);
menu.findItem(R.id.directions_bus).setVisible(false);
menu.findItem(R.id.working_cafes).setVisible(false);
break;
case "taxi":
menu.findItem(R.id.maps).setVisible(false);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
menu.findItem(R.id.sort_by).setVisible(false);
menu.findItem(R.id.today).setVisible(false);
menu.findItem(R.id.directions_bus).setVisible(false);
menu.findItem(R.id.working_cafes).setVisible(false);
break;
case "cinema":
menu.findItem(R.id.maps).setVisible(false);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
menu.findItem(R.id.sort_by).setVisible(false);
menu.findItem(R.id.today).setVisible(!drawerOpen);
menu.findItem(R.id.directions_bus).setVisible(false);
menu.findItem(R.id.working_cafes).setVisible(false);
break;
case "events":
case "souvenirs":
case "cash_machines":
menu.findItem(R.id.maps).setVisible(!drawerOpen);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
menu.findItem(R.id.sort_by).setVisible(false);
menu.findItem(R.id.today).setVisible(false);
menu.findItem(R.id.directions_bus).setVisible(false);
menu.findItem(R.id.working_cafes).setVisible(false);
break;
default:
menu.findItem(R.id.maps).setVisible(!drawerOpen);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
menu.findItem(R.id.sort_by).setVisible(!drawerOpen);
//menu.findItem(R.id.working_cafes).setVisible(false);
break;
}
return super.onPrepareOptionsMenu(menu);
}
任何想法如何处理这个问题?