如何在 2 个不同的 class 之间等待接收结果:

How to wait for receiving result between 2 different class:

我的程序有两个 classes 1 和 2。我的程序有一个菜单,在第一个 Class (1) 中打开和关闭。

这是Class1:

public class Class1 extends AppCompatActivity {
 ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // This function open menu correctly.
                openMenu();   
            }
        });
    }
        private void openMenu() { 
        drawerLayout.openDrawer(GravityCompat.START);
        // The openDrawer function in class 2 opens the menu. 
        // When it's closed in class 2, notify Class 1 here.

        }
}

并且这个ID是我的Class2:

public class Class2 extends DrawerLayout {

        public void openDrawer(View drawerView) {
        super.openDrawer(drawerView);
        currentSideBar = (SideBarWithBg) drawerView; 
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        y = ev.getY();
        if (y  > 400) {
            closeDrawers();
            // Notice to class 1 that the menu is closed.
            ...
            return super.dispatchTouchEvent(ev);
        }

    }
}

在class 1,我使用openMenu函数打开程序菜单。程序应在 openMenu 函数中等待 class 2 中的关闭菜单命令,以导出.. class 2 中关闭菜单的命令使用 dispatchTouchEvent 导出功能。

现在,我的问题是:如何在 class 1 的 openMenu 函数中接收关闭菜单命令来关闭它?

EventBus 可能会帮助您实现这一目标。

它是这样工作的

为每个动作创建自定义事件,订阅者将相应地采取行动。 Check out this article

我的问题通过这 5 个步骤解决了:

1.创建接口:

我这样创建 OnCloseMenuListener 界面:

interface OnCloseMenuListener {
    void setOnCloseMenu();
}

2。在Class1中实现接口:

Class1中,我实现了这个接口:

public class Class1 extends AppCompatActivity implements  OnCloseMenuListener

3。覆盖 setOnCloseMenu 方法:

在 Class1 中,我覆盖了接口的 setOnCloseMenu 方法 class:

@Override
public void setOnCloseMenu() {
    Log.e("<<O>>", "The menu closed...");
}

4。创建CloseMenu方法:

我在 Class1 中创建了这个 static 方法,当菜单在 Class2 中关闭时,它调用了:

public static void CloseMenu(OnCloseMenuListener close, boolean isClose) {
    if (isClose)
        close.setOnCloseMenu();
    }
}

5.在 Class2 中调用 CloseMenu:

Class2dispatchTouchEvent方法中,当条件为true并且菜单关闭时,我触发Class1使用CloseMenu方法:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    y = ev.getY();
    if (y  > 400) {
        closeDrawers();

        // This code notify Class1
        Class1.CloseMenu(new Class1(),true);

        return super.dispatchTouchEvent(ev);
    }
} 

希望对后来遇到这个问题的人有用