我在这里查看了很多帖子,但却无法完成任何工作。我试图让AlertDialog或Activity类(设置为Theme.Dialog样式)提示用户查看他们是否要退出一个Activity活动并返回Home活动。我尝试过的所有东西似乎都不起作用。
[注意:所有以下示例都作为......中的第一行尝试了]
@Override public void onBackPressed(){}
我试过了 -
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
关闭当前活动和主菜单活动(堆栈中的下一个活动),而 -
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Session.closing = true;
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Session.closing = false;
}
});
AlertDialog alert = builder.create();
alert.show();
关闭当前活动并在Home活动上创建弹出窗口。这是我尝试的其他大多数事情的结果,比如......
super.onBackPressed();
startActivity(new Intent(this, CloseActivityView.class));
是否有任何技巧可以通过转储当前的子Activity来获取onBackPressed?
答案 0 :(得分:0)
首先,请勿致电super.onBackPressed();
- 这会致电finish()
,您的当前活动将被删除。
其次,这:
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
创建启动主屏幕的意图。 (参见Intent文档)
你可以做的是在onBackPressed
覆盖:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
startActivity(new Intent(this, HomeActivity.class));
finish();
}
})
.setNegativeButton("No", null); // I think passing null here is OK.
AlertDialog alert = builder.create();
alert.show();
然后在清单中将HomeActivity
指定为launchMode="singleTask"
,详见Tasks and Back Stack docs。您可以通过在Intent上指定导航到HomeActivity的FLAG_ACTIVITY_NEW_TASK
标志来执行相同的操作。
答案 1 :(得分:0)
如果您想在后退按钮上显示确认对话框,请覆盖onBackPressed
并显示AlertDialog
。如果用户确认然后调用dialog.dismiss()
以关闭对话框,然后如果要退出应用程序并转到主屏幕,则完成此活动并启动主屏幕意图,并且您为此尝试的代码是正确的。或者,如果您想要返回应用内的活动,则可以使用FLAG_ACTIVITY_CLEAR_TOP
开始该活动。除非您想完成当前活动,否则请勿在覆盖版本中调用super.onBackPressed()
。
答案 2 :(得分:0)
好。有三点要说:
finish()
。让主屏幕在活动堆栈中。因此,当子活动必须导航回家庭活动时,它只需要完成自己的活动,之后会出现主屏幕。yes
AlertDialog
按钮后完成活动即可
Yes
和No
按钮编码