java - DrawerLayout onDrawerClosed() 调用两次

标签 java android listener android-view drawerlayout

我将菜单抽屉用作 list ,onDrawerClosed 取决于 int 值是否会向用户收费以保存更改。但是 onDrawerClosed 方法调用了两次,一次使用 int 和正确的值,一次使用 int 和 0 值?这导致我的程序同时调用 if 和 else 语句,以便保存他们的更改并提示他们付款。

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

最佳答案

确保您只调用了一次 addDrawerListener(),因为它“add”是一个监听器,不是“set”。

话虽如此,请确保您从 Activity 的 onCreate()(或 Fragment 的类似回调)调用该代码。否则,如果您从 onStart()onResume() 执行它,那么您将在每次调用这些回调时添加一个新的监听器。

关于java - DrawerLayout onDrawerClosed() 调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46946438/

相关文章:

android - 当第一个项目的高度为 0 时,SwipeRefreshLayout 不起作用

events - Ignite事件监听器注册错误

java - 如何从静态类更新文本框?

java - 如何找到数字在哪个范围内

Android:Proguard 在搞乱我

android - 在 Android 中使用带有证书的双向身份验证

android - 将监听器添加到单个 ListPreference 项目

java - 在文本字段上执行算术运算的事件监听器

java - 在 Mac 上美化一个 SWT 应用程序

java - 匹配 ASCII 非字母数字字符的正则表达式