Подтвердить что ты не робот

Скрытие кратковременной панели действий при открытии навигационного ящика

Вопрос аналогичен этому, за исключением того факта, что вместо использования View Pager (VP) я хочу использовать навигационный ящик (ND). У меня есть список элементов, который активирует панель контекстного действия (CAB), когда один или несколько элементов выбираются с помощью длительных действий нажатия. Когда ND открывается, я хочу временно скрыть CAB и показать основную панель действий, а когда она закрыта, чтобы снова показать CAB с выбранными элементами.

Эта функция указана в официальной официальной документации ND : "Скрыть панели контекстного действия, когда ящик видим". До сих пор я не мог найти нигде, как сделать это красиво, но я пробовал обходной путь:

  • Завершить CAB при открытии ND и сохранить выбранные элементы (если есть).
  • Когда ящик закрывается, запустите режим действия, который активирует CAB и заполняет список выбранных элементов из сохраненного списка.

Пример того, что я пытаюсь достичь, можно увидеть в приложении Gmail.

Заранее благодарю за любой ответ!

4b9b3361

Ответ 1

Чтобы достичь этого требования, я вызываю эти два метода из методов обратного вызова ActionBarDrawerToggle:

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;
}

Ответ 2

Если вы используете выдвижной ящик для навигации в стиле материала, принятое решение выглядит не так хорошо, как только ActionMode сидит на верхней части ящика, пока он полностью не откроется.

Альтернативой является использование onDrawerStateChanged вместо этого, тогда как только вы начнете перетаскивать ящик, он скроет ActionMode:

@Override
public void onDrawerStateChanged(int newState) {
    super.onDrawerStateChanged(newState);
    mActionMode.finish();
}

Ответ 3

Sprockets библиотека (раскрытие: я разработчик) делает это автоматически при расширении NavigationDrawerActivity и SprocketsListFragment. Вместо последнего можно также расширить SprocketsFragment и предоставить AbsListView в getAbsListView(). Когда откроется ящик навигации, ActionMode будет скрыт. И когда он будет закрыт, ActionMode будет восстановлен.