在片段Android中使用BackButton

时间:2016-08-02 13:23:51

标签: android fragment onbackpressed

我想在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.donKey之类的内容,那么我可以点击它再次。 我想说pmenu是一个简单的课程,它只会停止音乐,让事情消失等等。看起来好像我总是陷入那个班级。 你知道我做错了什么吗?

2 个答案:

答案 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();
}