java - 如何应用在 fragment 中按下后退按钮

标签 java android android-fragments onbackpressed

我是 Android 新手。我无法处理 onBackPressed 方法。我有一个 Activity 类,其中有四个 fragment ,例如 A、B、C、D。当我午餐时,默认情况下 Activity fragment A 处于 Activity 状态,并且 fragment A 上有链接可以移动另一个 fragment 。我希望当从 fragment A 移动另一个 fragment (如 B、C、D)并按下“后退”按钮时,它会返回到 fragment A,如果我从 fragment A 中按下“后退”按钮,它会显示一个对话框。 我使用了 onBackPressed() 如下所示

public void onBackPressed() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            MainActivity.this);

    // set title
    alertDialogBuilder.setTitle("Exit");

    // set dialog message
    AlertDialog.Builder builder = alertDialogBuilder
            .setMessage("Do you really want to exit?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // if this button is clicked, close
                    // current activity
                    MainActivity.this.finish();
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
                }
            });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();
}

但它适用于所有 fragment ,我只想仅适用于 fragment A

最佳答案

您必须仅在 Activity 的 onBackPressed 中处理此类要求。我通常遵循以下方法:

我保留一个枚举,其中定义了所有 fragment 以及一个用于跟踪当前 fragment 的参数:

enum FRAGMENTS{
    fragmentA, fragmentB, fragmentC, fragmentD
}
FRAGMENTS mCurrentFragment;

现在更改 fragment 的逻辑应该具有:

public void changeFragment(FRAGMENTS newFragment){
    //Your logic
    mCurrentFragment = newFragment;
}

最后是 onBackPressed 的逻辑:

onBackPressed{
     if(mCurrentFragment == FRAGMENTS.fragmentA){
          //Your code here of asking the user if he/she really wants to quit
          super.onBackPressed();
     }else{
          changeFragment(getPreviousFragment(mCurrentFragment));
     }
}

如果您不想使用枚举,您可以使用 Final int 或任何其他字符串值来表示不同的 fragment ,并使用 mCurrentFragment 参数来跟踪显示的 currentFragment,然后您可以轻松地使用 Activity 中的代码onBackPressed 方法

如果您需要更多说明,请告诉我。

关于java - 如何应用在 fragment 中按下后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34102054/

相关文章:

java - 我如何移动到 android 中的新 Activity ?

java - 从不同的类获取声明的变量

java - 在经典在线教程中找到正确的文件来构建 Android 项目

android - 适用于Android的OpenCV:将彩色图像转换为灰度时出错

android - 导航组件 : IllegalStateException Fragment not associated with a fragment manager

Android:如何覆盖 Google map 上的指南针操作

android - 在 android 中使用短信管理器发送短信时返回 RESULT_ERROR_GENERIC_FAILURE

java - 我可以在 jsp 页面中使用与输入类型=文件相同的形式输入类型=文本吗?

java - 如何映射来自同一源类的扩展 DTO

java - 延迟回收器查看每个项目的点击功能