2017-10-26 9 views
2

私はチェックリストとしてメニュードロワを使用していますが、int値によってはonDrawerClosedを使用しているため、ユーザーに課金されるか、変更を保存しないでください。しかし、onDrawerClosedメソッドは、intと正しい値で1回、intと0の値で1回、2回コールしていますか?これにより、私のプログラムはifとelseの両方の文を呼び出すため、変更が保存され、支払いが促されます。DrawerLayout onDrawerClosed()2回呼び出す

//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

どこから 'drawerListener()'メソッドを呼び出していますか? – azizbekian

+0

それだけです!神はあなたの時間を無駄にして申し訳ありません。それを実現せずにonCreateの代わりにonStartに入れた –

答えて

1

それは、sのリスナーを "を追加" ない s "を設定する" ので、あなたは、正確に一度addDrawerListener()を呼び出していることを確認してください。

言われているように、アクティビティ(または同様のコールバックFragment)のonCreate()からこのコードを呼び出していることを確認してください。それ以外の場合、たとえばonStart()またはonResume()から実行すると、コールバックが呼び出されるたびに新しいリスナーが追加されます。

関連する問題