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

时间:2018-09-01 16:20:15

标签: android listener

我有一个具有两个班级1和2的程序。我的程序有一个在第一个班级(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.

        }
}

这是我的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);
        }

    }
}

在第1课中,我使用openMenu函数打开程序菜单。程序应在openMenu函数中等待类2的关闭菜单命令才能导出。.在类2中关闭菜单的命令是使用dispatchTouchEvent函数导出的。

现在,我的问题是:如何在第1类的openMenu函数中接收关闭菜单命令以关闭该菜单?

2 个答案:

答案 0 :(得分:1)

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

这是它的工作方式 How EventBus works

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

答案 1 :(得分:1)

我的问题通过以下5个步骤得以解决:

1。创建界面:

我这样创建OnCloseMenuListener界面:

interface OnCloseMenuListener {
    void setOnCloseMenu();
}

2。在Class1中添加界面:

Class1中,我实现了以下接口:

public class Class1 extends AppCompatActivity implements  OnCloseMenuListener

3。覆盖setOnCloseMenu方法:

在Class1中,我重写了接口类的setOnCloseMenu方法:

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

4。创建CloseMenu方法:

我在static中创建了此Class1方法,当在Class2中关闭菜单时,它称为:

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

5。在CloseMenu中呼叫Class2

dispatchTouchEvent的{​​{1}}方法中,当条件为Class2并且菜单关闭时,我使用true方法触发了Class1

CloseMenu

我希望这对以后提出此问题的人有用。