Pytanie Ukrywanie aktywnego paska akcji, gdy szuflada nawigacji jest otwarta


Pytanie jest podobne do to z wyjątkiem faktu, że zamiast korzystać z View Pager (VP) chcę użyć szuflady nawigacji (ND). Mam listę elementów, które aktywują Kontekstowy pasek działań (CAB), gdy jeden / kilka elementów jest wybieranych za pomocą długich naciśnięć. Po otwarciu ND chcę tymczasowo ukryć CAB i pokazać podstawowy pasek akcji, gdy jest zamknięty, aby ponownie wyświetlić CAB z wybranymi pozycjami.

Funkcja jest określona w oficjalnej wersji ND dokumentacja "Ukryj paski kontekstowych akcji, gdy szuflada jest widoczna.". Do tej pory nie mogłem nigdzie znaleźć sposobu, aby zrobić to w przyjemny sposób, ale próbowałem obejścia:

  • Zakończ CAB po otwarciu ND i zapisz wybrane elementy (jeśli są).
  • Gdy szuflada zostanie zamknięta, uruchom tryb działania, który włącza CAB i zapełni listę wybranych elementów z zapisanej listy.

Przykład tego, co próbuję osiągnąć, można znaleźć w aplikacji Gmail.

Z góry dziękuję za odpowiedź!


11
2018-01-22 16:18


pochodzenie




Odpowiedzi:


Aby osiągnąć ten wymóg, wywołuję te dwie metody z metod wywołania zwrotnego 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;
}

4
2018-01-27 11:52



Moje podejście było podobne, ale ty też trzymasz listę sprawdzonych przedmiotów. Sądziłem, że bez tego rozwiązania może istnieć bardziej naturalny sposób. W każdym razie, dzięki. Chociaż poczekam na inne opinie, zanim zaakceptuję twoją odpowiedź. - Cosmin
+1 dla kodu, :-) - German Latorre


Jeśli używasz szuflady nawigacyjnej zaprojektowanej w stylu Material Design, zaakceptowane rozwiązanie nie wygląda tak dobrze jak ActionMode siedzi na szufladzie, aż jest całkowicie otwarty.

Alternatywą jest użycie onDrawerStateChanged zamiast tego, gdy tylko zaczniesz przeciągać szufladę, ukryjesz ActionMode:

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

4
2018-02-24 01:57





The Koła zębate biblioteka (ujawnienie: jestem programistą) robi to automatycznie po rozwinięciu NavigationDrawerActivity i SprocketsListFragment. Zamiast tego można również rozszerzyć SprocketsFragment i podaj swój AbsListView w getAbsListView (). Po otwarciu szuflady nawigacji, ActionMode będą ukryte. A gdy zostanie zamknięty, tryb działania zostanie przywrócony.


1
2017-12-09 19:24