Android 如何在按“后退”按钮时显示警告消息

Android 如何在按“后退”按钮时显示警告消息,android,android-navigation-editor,Android,Android Navigation Editor,我想应用程序显示警告消息时,用户按下后退按钮,若用户选择是,它将返回。我在导航图片段中 我在stack Overflow中搜索了很多次,并尝试: @Override public void onBackPressed() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("Save Or Not"); builder.setMessage("D

我想应用程序显示警告消息时,用户按下后退按钮,若用户选择是,它将返回。我在导航图片段中

我在stack Overflow中搜索了很多次,并尝试:

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle("Save Or Not");
    builder.setMessage("Do you want to save this? ");
    builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            /*Go back:-I dont know how*/
        }
    });
    builder.setNegativeButton("Discard",null);
    builder.show();
}
但它显示出给予者的错误: 方法不重写其超类中的方法

编辑:
我想在导航图片段中设置onBackPressedListener(手机后退按钮)

在按钮clicklistner
MainActivity.super.onBackPressed()中添加此行
将您的活动名称替换为
MainActivity

 builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
          dialog.dismiss();
          MainActivity.super.onBackPressed();
         //Replace your Activity name insted of MainActivity
        }
    });

当使用Fragments 1.1.0(现在是alpha格式)时,您可以按照说明如何注册的,它允许您从片段中注册
onBackPressed()
回调:

public class MyFragment extends Fragment {

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // This callback will only be called when MyFragment is at least Started.
    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            builder.setTitle("Save Or Not");
            builder.setMessage("Do you want to save this? ");
            builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // Save your content
                save();
                // Then pop
                NavHostFragment.findNavController(MyFragment.this).popBackStack();
            }
            builder.setNegativeButton("Discard",null);
            builder.show();
        });
        }
    });
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
  }
}

添加布尔变量isBack=false,如果它说是,则将其设置为true,并检查isBack为false或true的条件,如果为true,则添加super。按back()否则显示alter对话框以不同的函数包装alter对话框您想从片段中获取返回按钮?我需要在导航图片段中输入onBackButtonClickListener-谢谢您的帮助,但我在android导航图片段中,当我键入CreateGame.super.onBackPressed()时;它无法解析它(我也做了getActivity())Android studio没有解析。extends fragmentonbackpress()中的onbackpress()仅用于不在Fragment中的活动,请在其父活动中使用onbackpress来解析该片段。听到这一点,我很难过。感谢您的帮助,我有1.0.0-beta02版本的gradel片段。能否将其从gradel更改为1.1.0更新其版本注意:当从片段中设置OnBackPressedDispatcher时,需要上面的“Requiresponsibility()”前缀,但从活动中设置时,不需要前缀。
public class MyFragment extends Fragment {

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // This callback will only be called when MyFragment is at least Started.
    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            builder.setTitle("Save Or Not");
            builder.setMessage("Do you want to save this? ");
            builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // Save your content
                save();
                // Then pop
                NavHostFragment.findNavController(MyFragment.this).popBackStack();
            }
            builder.setNegativeButton("Discard",null);
            builder.show();
        });
        }
    });
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
  }
}