我想在BackButton
中使用Fragments
。我使用此代码处理后退按钮:
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
if (idozit.num > 0) {
if (!pmenu.pauseopen) {
pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0);
} else {
pmenu.continuegame();
}
}
if (idozit.num == 0) {
idozit.numnull(db);
}
//Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
}
当我点击BackButton时,此代码工作正常,但如果再次单击BackButton,应用程序将从onBackPressed
调用MainActivity
方法。我不知道为什么,但如果我在Toast
方法中仅使用Log.d
或onKey
之类的内容,那么我可以点击它再次。
我想说pmenu
是一个简单的课程,它只会停止音乐,让事情消失等等。看起来好像我总是陷入那个班级。
你知道我做错了什么吗?
答案 0 :(得分:1)
将最后一行中的false
替换为true
,并且在最后一行之前不需要return true
答案 1 :(得分:1)
更清洁的解决方案是使用一个名为onBackPressed()的方法使每个片段实现一个接口,如下所示:
public interface FragmentInterface {
void onBackPressed();
}
然后,你在你的活动中覆盖onBackPressed,调用当前片段的onBackPressed(我假设你有一个方法来获取你的currentFragment)
@Override
public void onBackPressed(){
FragmentInterface currentfragment = getCurrentFragment();
currentfragment.onBackPressed();
}
当然,在你的片段中,实现的方法应如下所示:
@Override
public void onBackPressed() {
if (idozit.num > 0) {
if (!pmenu.pauseopen) {
pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0);
} else {
pmenu.continuegame();
}
}
if (idozit.num == 0) {
idozit.numnull(db);
}
//Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show();
}