0

我在这里查看了很多帖子,但一直无法正常工作。我试图让 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));

是否有任何技巧可以让 onBackPressed 从转储您当前的子活动中获得?

4

3 回答 3

0

好的。想说三句话:

  1. 如果您的 home Activity 内容在离开它并进行一些操作后没有改变,那么,我建议您在离开 homw 屏幕时,不要调用finish(). 让主屏幕位于活动堆栈中。所以当子activity需要导航回homeactivity时,它只需要完成自己的activity,然后Home屏幕就会出现。
  2. 你的代码有点完美。您所要做的就是在yes按下按钮时完成活动AlertDialog
  3. 在主屏幕上,在 onBackPressed() 或您喜欢的任何内容中,只需显示 AlertDialog (您已在上面显示),您可以为YesNo按钮编写代码
于 2013-10-06T18:44:15.990 回答
0

首先,不要调用super.onBackPressed();- 这将调用finish()并且您当前的活动将被删除。

其次,这个:

Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);

创建启动主屏幕的意图。(请参阅意图文档)

你可以做的是在你的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();

然后在清单中指定您的HomeActivityas ,如Tasks 和 Back Stack docs中所述。您可以通过在 Intent 上指定用于导航到 HomeActivity的标志来执行相同的操作。launchMode="singleTask"FLAG_ACTIVITY_NEW_TASK

于 2013-10-06T08:14:02.237 回答
0

如果您想在按下后退按钮时显示确认对话框,请覆盖onBackPressed并显示AlertDialog. 如果用户确认然后调用dialog.dismiss()以关闭对话框,然后如果您想退出应用程序并转到主屏幕,则完成此活动并启动主屏幕意图,您为此尝试的代码是正确的。或者,如果您想返回应用程序中的某个活动,则可以使用FLAG_ACTIVITY_CLEAR_TOP. super.onBackPressed()除非您想完成当前活动,否则不要调用您的覆盖版本。

于 2013-10-06T08:22:49.507 回答