好的,所以我有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);
}
答案 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)
即使您已经接受了答案,但仍需记住以下几点。
您的导航堆栈可能是:
为什么不让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();在对话框中。 这将解决你的问题。