按下后退按钮显示警告对话框

时间:2016-05-17 12:29:21

标签: java android android-studio

我想在Android设备的后退按钮上显示一条警告消息,询问用户天气他确定与否。如果用户按“是”,则他应该导航到上一个。如果“否”,应恢复活动。但是,当我按下后退按钮执行这两个操作时,会出现问题。它还会导航到上一个活动并显示警报对话框。

  

这是我的代码。

public void onBackPressed() {

    super.onBackPressed();

    AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
    alertdialog.setTitle("Warning");
    alertdialog.setMessage("Are you sure you Want to exit the tutorial???");
    alertdialog.setPositiveButton("yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent=new Intent(secAddition.this,addition.class);
            startActivity(intent);
            secAddition.this.finish();
        }
    });

    alertdialog.setNegativeButton("No", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    AlertDialog alert=alertdialog.create();
    alertdialog.show();

}

5 个答案:

答案 0 :(得分:5)

如果要在不关闭应用程序或清除堆栈的情况下显示警告对话框,则不应致电 super.onBackPressed();

答案 1 :(得分:3)

请检查以下代码段

 @Override
 public void onBackPressed() {
     //super.onBackPressed();
     IsFinish("Want to close app?");
 }

 public void IsFinish(String alertmessage) {

      DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                    switch (which) {
                        case DialogInterface.BUTTON_POSITIVE:
                            android.os.Process.killProcess(android.os.Process.myPid());
                            // This above line close correctly
                            //finish();
                            break;

                        case DialogInterface.BUTTON_NEGATIVE:  
                            break;
                    }
                }
            };

      AlertDialog.Builder builder = new AlertDialog.Builder(context);
      builder.setMessage(alertmessage)
                .setPositiveButton("Yes", dialogClickListener)
                .setNegativeButton("No", dialogClickListener).show();

 }

答案 2 :(得分:2)

这就是你要找的东西。你不需要在后退时启动StartActivity。 如果用户选择“是”,则调用“超级onBackPress”

public void onBackPressed() {

   AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
   alertdialog.setTitle("Warning");
   alertdialog.setMessage("Are you sure you Want to exit the tutorial???");
   alertdialog.setPositiveButton("yes", new DialogInterface.OnClickListener(){

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

    alertdialog.setNegativeButton("No", new DialogInterface.OnClickListener(){

      @Override
      public void onClick(DialogInterface dialog, int which) {
         dialog.cancel();
      }

    });

    AlertDialog alert=alertdialog.create();
    alertdialog.show();

}

答案 3 :(得分:1)

删除

super.onBackPressed();

这应该有用。

public void onBackPressed() {

   AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
   alertdialog.setTitle("Warning");
   alertdialog.setMessage("Are you sure you Want to exit the tutorial???");
   alertdialog.setPositiveButton("yes", new DialogInterface.OnClickListener(){
       @Override
       public void onClick(DialogInterface dialog, int which) {
           Intent intent=new Intent(secAddition.this,addition.class);
           startActivity(intent);
           secAddition.this.finish();
       }
    });

   alertdialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
       @Override
       public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
       }
   });

   AlertDialog alert=alertdialog.create();
   alertdialog.show();

}

答案 4 :(得分:1)

你可以这样写,让你的代码工作:

public void onBackPressed() {

     AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
     alertdialog.setTitle("Warning");
     alertdialog.setMessage("Are you sure you Want to exit the tutorial???");
     alertdialog.setPositiveButton("yes", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
                 super.onBackPressed();    
           }
     });

    alertdialog.setNegativeButton("No", new DialogInterface.OnClickListener(){
           @Override
           public void onClick(DialogInterface dialog, int which) {
                 dialog.cancel();
           }
    });

    AlertDialog alert=alertdialog.create();
    alertdialog.show();

}

如果您要前往Activity,则无需再次启动Activity

在您的代码中,当您进行背压时,super.onBackPressed()会被调用,因此它会转到上一个Activity