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.