按下后停止显示对话框

时间:2014-01-02 14:34:29

标签: android android-dialog

好的,所以我有3个活动(A,B,C)活动A是主要活动。 在活动A中,我有一个密码对话框和一个按钮(通向活动B的按钮)。

因此,当我打开我的应用程序时,将出现密码对话框。现在我的问题是,每当我进入活动B并按下导致活动A的后退按钮时,密码对话框就会一直显示。我想要的是,只有当我打开我的应用程序时才会出现密码对话框,如果我从活动B返回活动A,则不会出现。

活动B

public void onBackPressed() {

        AlertDialog.Builder adb = new AlertDialog.Builder(Form.this);
        adb.setTitle("Go back to Activity A?"); 
        adb.setCancelable(false);
        adb.setNegativeButton("Cancel", null);
        adb.setPositiveButton("Exit", new AlertDialog.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {

                startActivity(new Intent(ActivityB.this, ActivityA.class));
            }
        });
        adb.show();
    }

在我的活动B中,我有一个按钮(通向活动C的按钮)。这就是我在活动B中设置onBackPressed的原因。

活动A

public void toB(View view) {    
        Intent intent = new Intent(this, ActivityB.class);
        startActivity(intent);
}

4 个答案:

答案 0 :(得分:0)

您可以通过bundlesavedinstance简单地使用一个标志来通知活动A它是从活动B调用的

答案 1 :(得分:0)

这很容易。从活动B返回活动A时,您所要做的就是告诉活动A您来自活动B.

onBackPressed()中,使用以下代码替换startActivity(new Intent(ActivityB.this, ActivityB.class));

Intent i = new Intent(ActivityB.this, ActivityB.class);
i.putExtra("from", "activityB");

然后,在活动A中,只需在显示对话框之前检查此额外内容:

Intent thisIntent = getIntent();
if (thisIntent != null && thisIntent.getExtras() != null
        && thisIntent.getExtras().containsKey("from")
        && thisIntent.getExtras().getString("from").equals("activityB")) {
        // Coming from Activity B : nothing
} else {
    // Display your dialog box
}

答案 2 :(得分:0)

即使您已经接受了答案,但仍需记住以下几点。

您的导航堆栈可能是:

  • A - > B - >按下 - > A
  • A - > B - > C - >按下 - > B - >按下 - > A

为什么不让Android为你处理这个?怎么样?因为你没有完成A,它的'onPause()在你启动时被调用B.现在在B中,当按下Back按钮时,只需调用finish(),而不是使用Intent转到A.这样,前提是您的密码对话框位于A中的onCreate()中,将调用A的onResume()并且不会显示对话框。

public void onBackPressed() {
    AlertDialog.Builder adb = new AlertDialog.Builder(this);
    adb.setTitle("Go back to Activity A?"); 
    adb.setCancelable(false);
    adb.setNegativeButton("Cancel", null);
    adb.setPositiveButton("Exit", new AlertDialog.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            //calling finish() will close this Activity(B) and go back to the previous
            //which in your case is Activity A if B was called from A
            finish();
        }
    });
    adb.show();
}

答案 3 :(得分:0)

只需添加dialog.dismiss();在对话框中。 这将解决你的问题。