android - 在 Fragments Android 中使用后退按钮

标签 android fragment onbackpressed

我想在 Fragments 中使用 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 方法中只使用 ToastLog.d 之类的东西,那么我'我可以再次点击它。 我想说 pmenu 是一个简单的类,它只会停止音乐、让事情消失等。似乎不知何故我总是被困在那个类中。 你知道我做错了什么吗?

最佳答案

一个更简洁的解决方案是让每个 fragment 都使用一个名为 onBackPressed() 的方法实现一个接口(interface),如下所示:

public interface FragmentInterface {
    void onBackPressed();
}

然后,您在调用当前 fragment 的 onBackPressed 的 Activity 中覆盖 onBackPressed(我假设您有获取 currentFragment 的方法)

@Override
public void onBackPressed(){
    FragmentInterface currentfragment = getCurrentFragment();
    currentfragment.onBackPressed();
}

当然,在你的 fragment 中,实现的方法应该是这样的:

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

关于android - 在 Fragments Android 中使用后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38721712/

相关文章:

android - 在导入到 Android 应用程序之前验证 sqlite 数据库

java - 单选按钮 setChecked NullPointerException

java - 我怎样才能让我的测试版过期?

android - fragment 是透明的,并在下面显示 Activity

android - 硬件后退按钮第一次不起作用

android - 父 Activity 在调用 onBackPressed() 时丢失数据

android - 如何删除回收器 View 中的空列表项?

android - 导航后未附加回收站 View

android - 在选项卡之间切换和更改应用程序布局的正确方法?

android - 如何返回到之前的 Activity ?