Как показать диалоговое окно после нажатия кнопки назад
Нажав кнопку "Назад", я хочу отобразить диалоговое окно, состоящее из 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;
}
в журнале cat hiiiii и "inside dialog_started" печатается, но диалоговое окно не появляется.
Как я могу получить это диалоговое окно при нажатии кнопки "Назад"?
Ответы
Ответ 1
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();
}
Ответ 2
Это более простое решение:
@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();
}
Ответ 4
@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);
}
Ответ 5
попробуйте это...
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);
}
Ответ 6
Вот еще один код для отображения сообщения о выходе:
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();
}
Ответ 7
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();
}
Ответ 8
Иногда активность сохраняет историю, и она не завершается после подтверждения.. в моем случае лучшее решение.
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();
}
}