使用onBackPressed()等待AlertDialog或Theme.Dialog活动的响应

时间:2013-10-06 06:44:34

标签: java android android-activity

我在这里查看了很多帖子,但却无法完成任何工作。我试图让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?

3 个答案:

答案 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)

好。有三点要说:

  1. 如果你的家庭活动内容在离开它后没有改变,并且做了一些操作,那么,我建议当你从同一屏幕导航时,不要拨打finish()。让主屏幕在活动堆栈中。因此,当子活动必须导航回家庭活动时,它只需要完成自己的活动,之后会出现主屏幕。
  2. 您的代码有点完美。您只需在yes
  3. 上按AlertDialog按钮后完成活动即可
  4. 在主屏幕上,在onBackPressed()或您喜欢的任何内容中,只显示AlertDialog(您已在上面显示),并且可以为YesNo按钮编码