Metoda setDrawerListener jest przestarzała

226

Gdy robię coś w mojej aplikacji, widzę, że szuflada nawigacji w mojej aplikacji zmniejszyła swój rozmiar. Ale nic na to nie robię.

szuflada nawigacji

Następnie, po sprawdzeniu kodu, zauważyłem, że setDrawerListener jest przestarzały. Czy ktoś ma na to rozwiązanie?

drawerLayout.setDrawerListener(actionBarDrawerToggle);
David Glorioso
źródło
9
Przestarzały kod prawdopodobnie nie ma nic wspólnego z rozmiarem szuflady. Oznacza to, że w przyszłości usuną wsparcie dla niego (konkretna metoda). Prawdopodobnie jest zastąpiony przez addDrawerListener, ale nie jestem tego pewien.
chRyNaN
Rozumiem ... ale nie widzę żadnego problemu, właśnie stworzyłem nowy fragment, który nie jest podłączony do tej szuflady .. Naprawdę nie mogę zrozumieć, dlaczego tak się stało ...
David Glorioso,
jakiej wersji biblioteki używasz?
Amit Vaghela,
Używam tego >> kompilacja „com.android.support:appcompat-v7:23.2.0”, kompilacja „com.android.support:design:23.2.0”, kompilacja „com.android.support:support-v4 : 23.2.0 '
David

Odpowiedzi:

751

Użyj addDrawerListener()zamiast tego.

Luxi Liu
źródło
13
Czemu. Po prostu dlaczego.
Broak
9
Dlaczego robią to gówno
Alex Wohlbruck
7
Dla spójności API. Dodali removeDrawerListener()więc, że add...ma na imię mecz
Marcin Orłowski,
26
przynajmniej mogą dołączyć use 'addDrawerListener' insteaddo przestarzałej wiadomości!
AaA,
1
Więc ... czy możemy dodać wiele detektorów z szufladami?
Kenny Worden,
84

Zastąpić:

drawer.setDrawerListener(...);

z

drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) Ustawia nasłuchiwanie na powiadamianie o zdarzeniach szuflady.

Zauważ, że ta metoda jest przestarzała i należy jej użyć, addDrawerListener(DrawerLayout.DrawerListener)aby dodać detektora i removeDrawerListener(DrawerLayout.DrawerListener)usunąć zarejestrowanego detektora.

Jzapata
źródło
18
Gdzie powinniśmy usunąć detektor szuflad i czy jest to konieczne?
portfoliobuilder
@portfoliobuilder To zależy. Zasadniczo nie jest to konieczne. Jeśli go onCreate()włączysz i obrócisz ekran, cała aktywność zostanie odtworzona i ustawiony zostanie nowy odbiornik. Bardziej złożone przypadki należy traktować z myślą, że (prawdopodobnie) nie ma potrzeby ustawiania więcej niż 1 detektora DrawerLayout.
Johnny Five
29

Zastąpić setDrawerListener

drawerLayout.setDrawerListener(actionBarDrawerToggle);

z addDrawerListener

drawerLayout.addDrawerListener(actionBarDrawerToggle);

przykład

  DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            assert drawer != null;
            drawer.addDrawerListener(toggle);
            toggle.syncState();

            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            assert navigationView != null;
            navigationView.setNavigationItemSelectedListener(this);
sivaBE35
źródło
22

Chyba odpowiem na moje pytanie. Najnowsze navigationViewprodukuje ustawienia domyślne android:layout_heightprawie w dowolnym 18dpmomencie "wrap_content". Musisz więc wybrać to android:layout_height, co chcesz navigationViewlub po prostu zrobić android:layout_height="match_parent".

<android.support.design.widget.NavigationView
    android:layout_width="320dp"
    android:layout_height="550dp"
    android:id="@+id/navigation_view_admin"
    android:layout_gravity="start">

</android.support.design.widget.NavigationView>

W każdym razie jego wysokość zwiększa się automatycznie po dodaniu elementu do szuflady nawigacji.

Na koniec użyj addDrawerListener()zamiast setDrawerListener()jak powiedział Luxi Liu.

David Glorioso
źródło
6
ponieważ to nie jest moje główne pytanie. nie widzisz Proszę przeczytać mój problem przed ... To nie tylko przestarzała rzecz,
David Glorioso
7
To może naprawić tytuł twojego pytania
Sharique Abdullah