2017-10-26 9 views
2

Ich benutze die Menüleiste als Checkliste und onDrawerClosed abhängig von einem int-Wert wird der Benutzer oder nicht speichern Änderungen zu belasten. Die Methode onDrawerClosed ruft jedoch zweimal auf, einmal mit dem int und dem richtigen Wert und einmal mit dem int und einem Wert von 0? Dies führt dazu, dass mein Programm sowohl die if als auch die else Statements aufruft, damit ihre Änderungen gespeichert werden und sie zur Zahlung aufgefordert werden.DrawerLayout onDrawerClosed() ruft zweimal

//Used so that when drawer closed banned list saves 
public void drawerListener(){ 
    mDrawer.addDrawerListener(new DrawerLayout.DrawerListener() { 
     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      customAdaptor.clearJustChanged(); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      System.out.println("Cost of Changes:" + customAdaptor.getUserCostOfChange()); 
      if (customAdaptor.getUserCostOfChange() > 0) { 
       getBuyAlert(customAdaptor.getUserCostOfChange()); 
       customAdaptor.setUserCostOfChange(0); 
      } 
      else { 
       bannedList = customAdaptor.getBannedList(); 
       databaseReference.child("BannedApps").setValue(bannedList); 
      } 
     } 

     @Override 
     public void onDrawerStateChanged(int newState) { 
     } 
    });} 


Output: 
10-26 01:30:40.346 23822-23822/com.shuffle.v01 I/System.out: Cost of 
Changes:1000 

10-26 01:30:40.450 23822-23822/com.shuffle.v01 I/System.out: Cost of 
Changes:0 
+1

Woher rufen Sie die 'drawerListener()' Methode? – azizbekian

+0

Das war's! Gott, ein so dummer Fehler tut mir leid, dass du deine Zeit verschwendet hast. Hatte es in onStart statt onCreate ohne zu realisieren –

Antwort

1

Stellen Sie sicher, addDrawerListener() genau einmal anrufen, weil es " hinzufügen" s ein Zuhörer, nicht "set" s.

Das gesagt, stellen Sie sicher, dass Sie diesen Code von onCreate() der Aktivität (oder ähnlichen Rückruf von Fragment) aufrufen. Andernfalls, wenn Sie es beispielsweise von onStart() oder onResume() ausführen, werden Sie jedes Mal einen neuen Listener hinzufügen, wenn diese Callbacks aufgerufen werden.

Verwandte Themen