Il metodo setDrawerListener è obsoleto


226

Mentre sto facendo qualcosa sulla mia app, vedo che il riquadro di navigazione sulla mia app ne ha ridotto le dimensioni. Ma non sto facendo nulla al riguardo.

cassetto di navigazione

Quindi, dopo aver controllato il codice, ho visto che setDrawerListener è obsoleto. Qualcuno ha una soluzione a questo?

drawerLayout.setDrawerListener(actionBarDrawerToggle);

9
Il codice obsoleto probabilmente non ha nulla a che fare con le dimensioni del cassetto. Significa che rimuoveranno il supporto in futuro (il metodo specifico). Probabilmente viene sostituito con un addDrawerListener ma non ne sono sicuro.
chRyNaN,

vedo .. ma non riesco a vedere alcun problema, ho appena creato un nuovo frammento che non è collegato su quel cassetto .. non riesco davvero a capire perché quella cosa sia accaduta ...
David Glorioso,

quale versione della libreria stai usando?
Amit Vaghela,

Sto usando questo >> compilare 'com.android.support:appcompat-v7:23.2.0', compilare 'com.android.support:design:23.2.0', compilare 'com.android.support:support-v4 : 23.2.0 '
David Glorioso

Risposte:


751

Usa addDrawerListener()invece.


13
Perché. Semplicemente, perché.
Broak,

9
Perché fanno questa merda
Alex Wohlbruck il

7
Per coerenza API. Hanno aggiunto removeDrawerListener()così add...è chiamato per abbinare
Marcin Orlowski il

26
almeno potrebbero essere inclusi use 'addDrawerListener' insteadnel messaggio obsoleto!
AaA,

1
Quindi ... possiamo aggiungere più ascoltatori di cassetti?
Kenny Worden,

84

Sostituire:

drawer.setDrawerListener(...);

con

drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) Imposta un listener per ricevere notifiche sugli eventi drawer.

Si noti che questo metodo è obsoleto e si dovrebbe usare addDrawerListener(DrawerLayout.DrawerListener)per aggiungere un listener e removeDrawerListener(DrawerLayout.DrawerListener)per rimuovere un listener registrato.


18
Dove dovremmo rimuovere l'ascoltatore di cassetti ed è necessario?
portfoliobuilder il

@portfoliobuilder Dipende. In generale, non è necessario. Se lo si imposta onCreate()e si ruota lo schermo, viene ricreata l'intera attività e viene impostato il nuovo listener. I casi più complessi dovrebbero essere gestiti pensando che (probabilmente) non è necessario avere più di 1 listener impostato su DrawerLayout.
Johnny Five,

29

Sostituire setDrawerListener

drawerLayout.setDrawerListener(actionBarDrawerToggle);

con addDrawerListener

drawerLayout.addDrawerListener(actionBarDrawerToggle);

esempio

  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

Immagino che risponderò alla mia domanda. L'ultima navigationViewproduce il suo valore predefinito android:layout_heightquasi 18dpquando si sceglie "wrap_content". Quindi, devi scegliere android:layout_heightquello che vuoi per il tuo navigationViewo semplicemente fare 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>

Ad ogni modo, la sua altezza aumenta automaticamente quando aggiungi un elemento nel riquadro di navigazione.

Infine, usa addDrawerListener()invece di setDrawerListener()come diceva Luxi Liu.


6
perché questa non è la mia domanda principale. non vedi? Per favore, leggi il mio problema prima ... Non è solo una cosa deprecata,
David Glorioso,

7
Quindi potrebbe essere risolto il titolo della tua domanda
Sharique Abdullah,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.