如何在覆盖onBackPressed()方法时获取super.onBackPressed()的行为

5

我试图使用确认对话框返回,所以我决定处理onBackPressed()方法,然后我为确认对话框添加了带有null listener的确定和取消按钮的代码。

@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Confirmation");
    builder.setMessage("Are you sure want to exit?");
    builder.setPositiveButton("OK",null);
    builder.setNegativeButton("Cancel", null);
    builder.show();   
}


它一直工作得很好,但问题在于如果我点击确定,则应继续执行super.onBackPressed()的行为,否则它应该停留在同一个活动中。
以下是我尝试过的代码。

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Confirmation");
    builder.setMessage("Are you sure want to exit?");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            //super.onBackPressed();
        }
    });
    builder.setNegativeButton("Cancel", null);
    builder.show();   
}

你的代码是正确的,只需要在点击取消时关闭对话框即可。 - Saqib
5个回答

5

在正按钮的onclick事件中加入finish()来结束你的活动...

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        //super.onBackPressed();
        finish();
    }
});

2

调用完全相同的超级方法:

YourActivity.super.onBackPressed();

1

this.finish在我的活动中不被允许,this.finalize是可怕的代码。Android Studio项目希望它被包围在try/catch中。

由于无法在对话框接口的onClick方法中调用super.onBackPressed(),因此最好调用一些私有方法。

让该私有方法调用super.onBackPressed(),结果与按下返回按钮相同。


0
如果用户按下了返回按钮,你可以非常确定他们想要退出。然而,话虽如此:
你也应该为取消按钮实现一个 OnClickListener,并使用以下代码:
public void onClick(DialogInterface dialog, int which){
    dialog.dismiss();
}

0

试试这个:

boolean exit=false;

    ...

@Override
public void onBackPressed() {
  if (exit){
    exit=false;
    super.onBackPressed();
  }else {
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
                                switch (which) {
        case DialogInterface.BUTTON_POSITIVE:
          exit = true;
          onBackPressed();
          break;
        case DialogInterface.BUTTON_NEGATIVE:
          break;
      }
    };
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                        builder.setMessage("Are you sure").setPositiveButton("yes", dialogClickListener).setNegativeButton(getResources().getString("no"), dialogClickListener).show();
  }
}

在包含片段的主活动中使用此代码,如果用户在片段上按下返回键,则应用程序会显示对话框,如果用户按下“是”按钮,则会返回到onBackPressed的调用,但现在它会返回到上一个片段。

虽然这可能是解决问题的有价值的提示,但一个好的答案也应该展示解决方案。请编辑并提供关于代码的解释。 - ρяσѕρєя K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接