2014-01-22 3 views
11

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

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

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

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

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

ответ

4

Чтобы выполнить это требование, я называю эти два метода из методов обратного вызова 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; 
} 
+0

Мой подход был похож, но вы также ведение списка проверяемых элементов. Я думал, что это может быть более естественным способом без этого обхода. В любом случае, спасибо. Хотя я буду ждать других мнений, прежде чем принимать ваш ответ. – Cosmin

+0

+1 для кода, :-) –

1

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

4

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

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

@Override 
public void onDrawerStateChanged(int newState) { 
    super.onDrawerStateChanged(newState); 
    mActionMode.finish(); 
} 
Смежные вопросы