代码之家  ›  专栏  ›  技术社区  ›  Saeed

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

  •  0
  • Saeed  · 技术社区  · 7 年前

    我有一个程序,有两个类1和2。我的程序有一个菜单,可以在第一节课(1)中打开和关闭。

    这是一级:

    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.
    
            }
    }
    

    以及

    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);
            }
    
        }
    }
    

    openMenu 功能。程序应该等待 函数到类2中的关闭菜单命令,导出。。类2中关闭菜单的命令是使用导出的 dispatchTouchEvent 功能。

    现在, 如何在中接收关闭菜单命令 打开菜单

    2 回复  |  直到 7 年前
        1
  •  1
  •   Muhammad Youssef    7 年前

    EventBus 也许能帮你实现。

    这就是它的工作原理 How EventBus works

    Check out this article

        2
  •  1
  •   Saeed    7 年前

    1创建接口:

    OnCloseMenuListener

    interface OnCloseMenuListener {
        void setOnCloseMenu();
    }
    

    2在Class1中安装接口:

    Class1 ,我实现了这个接口:

    public class Class1 extends AppCompatActivity implements  OnCloseMenuListener
    

    三。覆盖 setOnCloseMenu 方法:

    在1班,我覆盖了 设置关闭菜单

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

    4创建 CloseMenu 方法:

    我创造了这个 static 中的方法 1级 Class2

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

    5打电话 关闭菜单 在里面 2级

    dispatchTouchEvent 方法 2级 true 当菜单关闭时,我触发 使用 关闭菜单 方法:

    @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);
        }
    }