Hiding contexual action bar while navigation drawer is open

后端 未结 3 1368
小鲜肉
小鲜肉 2021-01-02 04:17

The question is similar to this except for the fact that instead of using a View Pager (VP) I want to use a Navigation Drawer (ND). I have a list of elements that activates

相关标签:
3条回答
  • 2021-01-02 04:45

    The Sprockets library (disclosure: I'm the developer) does this automatically when extending NavigationDrawerActivity and SprocketsListFragment. Instead of the latter, it's also possible to extend SprocketsFragment and provide your AbsListView in getAbsListView(). When the navigation drawer is opened, the ActionMode will be hidden. And when it is closed, the ActionMode will be restored.

    0 讨论(0)
  • 2021-01-02 04:56

    If you're using a material design styled navigation drawer, the accepted solution doesn't look all that nice as the ActionMode sits on top of the drawer until it's fully open.

    An alternative is to use onDrawerStateChanged instead, then as soon as you start dragging the drawer it will hide the ActionMode:

    @Override
    public void onDrawerStateChanged(int newState) {
        super.onDrawerStateChanged(newState);
        mActionMode.finish();
    }
    
    0 讨论(0)
  • 2021-01-02 05:04

    To achieve this requirement, I am calling these two methods from the ActionBarDrawerToggle callback methods:

    public void onDrawerOpened() {
      if (mActionMode != null) {
        mCheckedListItems = mListView.getCheckedItemPositions().clone();
        mActionMode.finish();
      }
    }
    public void onDrawerClosed() {
      if (mCheckedListItems!=null) {
        for (int i=0; i<mCheckedListItems.size(); i++) {
          if (mCheckedListItems.valueAt(i)) {
            mListView.setItemChecked(mCheckedListItems.keyAt(i), true);
          }
        }
      }
      mCheckedListItems = null;
    }
    
    0 讨论(0)
提交回复
热议问题