2017-10-26 16 views
2

체크리스트로 메뉴 서랍을 사용하고 int 값에 따라 onDrawerClosed를 사용하여 사용자에게 비용을 청구하거나 변경 사항을 저장하지 않습니다. 그러나 onDrawerClosed 메서드는 int와 올바른 값으로 한 번, int와 0의 값으로 한 번씩 두 번 호출합니다. 이로 인해 내 프로그램에서 if 및 else 문을 호출하여 변경 사항을 저장하고 지불하라는 메시지가 표시됩니다.DrawerLayout onDrawerClosed() 두 번 호출

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

그게 다야! 신의 어리석은 실수는 시간 낭비로 유감입니다. 그것을 실현하지 않고 onCart로 대신 onStart에 넣었습니다. –

답변

1

는 "을 추가"때문에, 정확히 한 번만 addDrawerListener()를 호출하고 있는지 확인은 들 "설정"하지, 리스너이야.

그렇다고해서 onCreate() (또는 유사한 콜백 Fragment) 코드를 호출해야합니다. 그렇지 않으면 수행 할 경우 onStart() 또는 onResume()에서 호출하면 해당 콜백이 호출 될 때마다 새 수신기를 추가합니다.