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

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.


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.


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.