我有3个活动,A,B和C。A先打开B,然后立即打开C,所以我无法调用finish();在C打开之前在B上。我尝试用FLAG_ACTIVITY_NO_HISTORY标记B,但是当从C按下后退键时它仍处于打开状态。因此,我想知道是否可以告诉活动C从堆栈onBackPressed()中删除当前活动和先前活动。我不想通过覆盖onBackPressed来打开C,因为那样会破坏我的后堆栈。有什么想法吗?
编辑:我不是从B打开C。A正在打开它们两个,因此我无法仅完成()B。
EDIT2:这是打开新活动的代码。 (B是StandardInfoActivity,C是AddGradeActivity)。通过单击列表视图中的一个项目(两个不同的列表)可以打开它们。当我打开C时,另一个列表中同一项目的活动也会在下面打开B。
//make listview items respond to clicks and open relevant activity
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
String standard = ((TextView) view).getText().toString();
// Launching new Activity on selecting single List Item
Intent i = new Intent(SubjectActivity.this, StandardInfoActivity.class);
// sending data to new activity
i.putExtra("standard", standard);
i.putExtra("subject", subjectId);
i.putExtra("subjectName", subject);
i.putExtra("level", level);
startActivity(i);
}
});
gradeView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent2, View view,
int position, long id2) {
// Launching new Activity on selecting single List Item
Intent j = new Intent(SubjectActivity.this, AddGradeActivity.class);
// sending data to new activity
j.putExtra("subjectId", subjectId);
j.putExtra("position", position);
j.putExtra("level", level);
j.putExtra("subject", subject);
startActivity(j);
}
});
答案 0 :(得分:1)
打开新活动时清除FLAG_ACTIVITY_CLEAR_TASK
Intent intent = new Intent(B.this, C.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
像这样从活动A到B也开始
答案 1 :(得分:1)
下面的代码将删除A和B活动的所有后退堆栈,只需使用您开始进行活动的代码即可
Intent i = new Intent(context, activityRedirectClass);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
答案 2 :(得分:1)
您可以通过在该活动中调用静态方法来进行以下操作:
在活动B中声明变量
static ActivityB activityB;
在onCreate
中写:
activityB = this;
然后添加以下功能
public static ActivityB getInstance(){
return activityb;
}
现在您要从ActivityC完成它
按照以下说明在您的onbackPressed()
在活动C中,调用函数getInstance()
ActivityB.getInstance().finish();
答案 3 :(得分:0)
您可以在活动B中使用onActivityResult
方法,并使用startActivityForResult
方法来调用活动C。一旦收到B上的回调,就可以完成它。这会做有需要的
Ref:https://developer.android.com/training/basics/intents/result