在Android中使用BackButton

在Android中使用BackButton,android,fragment,onbackpressed,Android,Fragment,Onbackpressed,我想使用Fragments中的BackButton。我使用以下代码来处理backbutton: @Override public void onResume() { super.onResume(); getView().setFocusableInTouchMode(true); getView().requestFocus(); getView().setOnKeyListener(new View.OnKeyListener() { @O

我想使用
Fragments
中的
BackButton
。我使用以下代码来处理backbutton:

 @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,应用程序将从
MainActivity
调用
onBackPressed
方法。我不知道为什么,但是如果我在
onKey
方法中只使用了
Toast
Log.d
类似的东西,那么我可以再次单击它。 我想说的是,
pmenu
是一门简单的课程,它只会停止音乐,让事情过去,等等。似乎不知何故,我总是困在那门课上。
你知道我做错了什么吗?

将最后一行中的
false
替换为
true
,并且在最后一行之前没有必要
返回true
,一个更干净的解决方案是使用一个名为onBackPressed()的方法,让每个片段实现一个接口,如下所示:

public interface FragmentInterface {
    void 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();
}
然后,重写调用当前片段的onBackPressed的onBackPressed in yout活动(我假设您有一个获取当前片段的方法)

当然,在您的片段中,实现的方法应该如下所示:

public interface FragmentInterface {
    void 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();
}

这是更好的解决方案!谢谢你的回答!