按下后退按钮后如何显示对话框

问题描述 投票:17回答:8

通过单击后退按钮,我要显示一个包含TextViews的对话框和一个名为exit的按钮。点击退出按钮后,它应该会从我的应用中显示出来

我确实喜欢这个,

@Override       
public void onBackPressed() {       
    System.out.println("hiiii");
    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.dialog);

    Button exitButton = (Button) dialog.findViewById(R.id.exit);
    System.out.println("inside dialog_started");
    exitButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            MainActivity.this.finish();
            dialog.dismiss();
        }
    });
    return;
}

在日志目录hiiiii和“ inside dialog_started”中被打印,但是对话框不出现。如何获得单击后退对话框的对话框?

android back-button
8个回答
31
投票
 public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        exitByBackKey();

        //moveTaskToBack(false);

        return true;
    }
    return super.onKeyDown(keyCode, event);
}

protected void exitByBackKey() {

    AlertDialog alertbox = new AlertDialog.Builder(this)
    .setMessage("Do you want to exit application?")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {

        // do something when the button is clicked
        public void onClick(DialogInterface arg0, int arg1) {

            finish();
            //close();


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

        // do something when the button is clicked
        public void onClick(DialogInterface arg0, int arg1) {
                       }
    })
      .show();

}

6
投票

这是一个更简单的解决方案:

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

    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) {
            saveResult();
            MyActivity.super.onBackPressed();
        }
    });
    builder.setNegativeButton("Discard", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            MyActivity.super.onBackPressed();
        }
    });
    builder.show();
}

3
投票
 @Override
public void onBackPressed() {
// TODO Auto-generated method stub
      AlertDialog.Builder builder=new AlertDialog.Builder(mContext);
     // builder.setCancelable(false);
      builder.setTitle("Rate Us if u like this");
      builder.setMessage("Do you want to Exit?");
      builder.setPositiveButton("yes",new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Toast.makeText(mContext, "Yes i wanna exit", Toast.LENGTH_LONG).show();

            finish();
        }
    });
      builder.setNegativeButton("No",new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Toast.makeText(mContext, "i wanna stay on this page", Toast.LENGTH_LONG).show();
            dialog.cancel();

        }
    });
      builder.setNeutralButton("Rate",new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

            final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
            try {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())));
            } catch (android.content.ActivityNotFoundException anfe) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
            }

        }
    });
      AlertDialog alert=builder.create();
      alert.show();
     //super.onBackPressed(); 
      }

0
投票
    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode != KeyEvent.KEYCODE_BACK)  return super.onKeyDown(keyCode, event);

            DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    //Yes button clicked
                   finish();
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    //No button clicked
                    break;
                }
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
            .setNegativeButton("No", dialogClickListener).show();





        return super.onKeyDown(keyCode, event);
    }

0
投票

尝试一下...

     public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {

         AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Exit Alert");
            alertDialog.setIcon(R.drawable.appicon);

            alertDialog.setMessage("Do you really want to exit the Game?");
            alertDialog.setButton("Yes", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {
                  finish();
                return;
            } }); 
            alertDialog.setButton2("No", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {
                  dialog.cancel();
                return;
            }}); 
              alertDialog.show();

         return true;
     }
     return super.onKeyDown(keyCode, event);
 }

0
投票

这里是另一个显示退出消息的代码:

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

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

    // set dialog message
    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
                Menu.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();
    }

0
投票
its working exactly....




public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            exitByBackKey();

            //moveTaskToBack(false);

            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    protected void exitByBackKey() {

        AlertDialog alertbox = new AlertDialog.Builder(this)
        .setMessage("Do you want to exit application?")
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {

            // do something when the button is clicked
            public void onClick(DialogInterface arg0, int arg1) {

                finish();
                //close();


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

            // do something when the button is clicked
            public void onClick(DialogInterface arg0, int arg1) {
                           }
        })
          .show();

    }

0
投票

有时活动保留历史记录,并且在确认后不会退出..就我而言,这是最佳解决方案。

private int k = 0;


@Override
public boolean onKeyDown(int keyCode, KeyEvent e) {

    if (keyCode == KeyEvent.KEYCODE_BACK) {
        oNBackPressedExitApp();
        return true;
    }

    return super.onKeyDown(keyCode, e);
}

@Override
protected void onStart() {
    super.onStart();
    k = 0;
}


public void oNBackPressedExitApp(){
        k++;
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("Exit Confirmation");
        alertDialog.setIcon(R.drawable.ic_launcher);
        alertDialog.setMessage("Do you really want to exit the App?");

    if(k == 1) {
        alertDialog.setButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                finish();
                Intent homeScreenIntent = new Intent(Intent.ACTION_MAIN);
                homeScreenIntent.addCategory(Intent.CATEGORY_HOME);
                homeScreenIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(homeScreenIntent);
                return;
            }
        });
        alertDialog.setButton2("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                return;
            }
        });
        alertDialog.show();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.