调用supportInvalidateOptionsMenu()后如何避免列表刷新;?

时间:2015-05-26 20:57:52

标签: android android-fragments android-actionbar navigation-drawer

我的片段中有列表,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);
    }

任何想法如何处理这个问题?

0 个答案:

没有答案