要从堆栈中的onBackPressed中删除两个活动吗?

时间:2018-09-07 04:54:38

标签: android

我有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);
        }
    });

4 个答案:

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