我有一个具有两个班级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
函数中接收关闭菜单命令以关闭该菜单?
答案 0 :(得分:1)
答案 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
我希望这对以后提出此问题的人有用。