Android 是否从堆栈中移除两个活动?

Android 是否从堆栈中移除两个活动?,android,Android,我有3个活动,A、B和C。A打开B,然后立即打开C,因此我无法调用finish();在打开C之前打开B。我已经尝试用FLAG_ACTIVITY_NO_HISTORY标记B,但当从C按back时,它仍然打开。因此,我想知道是否可以告诉ACTIVITY C从堆栈onBackPressed()中删除当前和以前的活动。我不想通过重写onBackPressed来打开C,因为那样会破坏我的backbackback。有什么想法吗 编辑:我不是从B中打开C。A是同时打开它们,因此我无法完成()B EDIT2:这

我有3个活动,A、B和C。A打开B,然后立即打开C,因此我无法调用finish();在打开C之前打开B。我已经尝试用FLAG_ACTIVITY_NO_HISTORY标记B,但当从C按back时,它仍然打开。因此,我想知道是否可以告诉ACTIVITY C从堆栈onBackPressed()中删除当前和以前的活动。我不想通过重写onBackPressed来打开C,因为那样会破坏我的backbackback。有什么想法吗

编辑:我不是从B中打开C。A是同时打开它们,因此我无法完成()B

EDIT2:这是打开新活动的代码。(B为标准信息活动,C为添加等级活动)。通过单击listview(两个不同的列表)中的一个项目可以打开它们。当我打开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);
        }
    });
//使listview项目响应单击并打开相关活动
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//选定项目
字符串标准=((TextView)视图).getText().toString();
//在选择单个列表项时启动新活动
意图i=新意图(SubjectActivity.this、StandardInfoActivity.class);
//向新活动发送数据
i、 putExtra(“标准”,标准);
i、 putExtra(“主语”,主语);
i、 putExtra(“主题名称”,主题);
i、 putExtra(“级别”,级别);
星触觉(i);
}
});
gradeView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView parent2,视图,
int位置,长id2){
//在选择单个列表项时启动新活动
意图j=新意图(SubjectActivity.this,AddGradeActivity.class);
//向新活动发送数据
j、 putExtra(“主观性的”,主观性的);
j、 putExtra(“位置”,位置);
j、 putExtra(“级别”,级别);
j、 putExtra(“主题”,主题);
星触觉(j);
}
});

您可以在活动B中使用
onActivityResult
方法,并使用
startActivityForResult
方法调用活动C。一旦收到B上的回调,就可以完成它。这将起到必要的作用


Ref:

您可以在活动B中使用
onActivityResult
方法,并使用
startActivityForResult
方法调用活动C。一旦收到B上的回调,就可以完成它。这将起到必要的作用


参考:

打开新活动时清除标志\u活动\u清除任务

Intent intent = new Intent(B.this, C.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

像这样,在打开新活动时,从活动A到开始B也要清除标记\u活动\u清除\u任务

Intent intent = new Intent(B.this, C.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

像这样,从活动A开始启动B也

以下代码将删除A和B活动的所有后台代码,只需使用代码即可启动活动

 Intent i = new Intent(context, activityRedirectClass);

          i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

          startActivity(i);

下面的代码将删除A和B活动的所有backbackback,只需在开始活动时使用代码即可

 Intent i = new Intent(context, activityRedirectClass);

          i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

          startActivity(i);

通过在该活动中调用静态方法,可以按如下方式执行:

在活动B中声明变量

 static ActivityB activityB;
onCreate
write中:

 activityB = this;
然后添加下面的函数

public static ActivityB getInstance(){
   return   activityb;
 }
现在,当您想从ActivityC完成它时

onbackPressed()中执行以下操作

在活动C中,调用函数
getInstance()


通过在该活动中调用静态方法,可以按如下方式执行:

在活动B中声明变量

 static ActivityB activityB;
onCreate
write中:

 activityB = this;
然后添加下面的函数

public static ActivityB getInstance(){
   return   activityb;
 }
现在,当您想从ActivityC完成它时

onbackPressed()中执行以下操作

在活动C中,调用函数
getInstance()



因此,尝试以“startActivityForResult”的形式启动从B到C的意图调用,并在B的onActivityResult中调用finishintent@SonuSanjeev我不是从B开始活动C。活动A同时开始,C在顶部。您可以选择本地广播管理器。当您从C按back并在B中接收广播并呼叫finish时,发送广播。看看它是否能正常工作。A打开B,然后立即打开C-->这是什么意思?可以显示代码吗?因此,尝试以“startActivityForResult”的形式启动从B到C的意图调用,并在B的onActivityResult中调用finish。尝试在B的intent@SonuSanjeev我不是从B开始活动C。活动A同时开始,C在顶部。您可以选择本地广播管理器。当您从C按back并在B中接收广播并呼叫finish时,发送广播。看看它是否能正常工作。A打开B,然后立即打开C-->这是什么意思?可以显示代码吗?该代码将从堆栈中删除所有内容。我只想删除B。此外,我正在从A打开B和C,而不是从B打开C。这种情况下,请根据您的工作流程使用反压和自定义代码。我认为这里没有更多选项该代码将从堆栈中删除所有内容。我只想删除B。另外,我从A中打开B和C,而不是从B中打开C。这种情况下,根据您的工作流程使用反压和自定义代码。我认为这里没有更多选项,但我从活动中启动B和C。我从活动中启动B和C。AIt看起来很有希望,但我很难让它工作。ActivityB我用我的activity B的名称交换,对吗?我得到了java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void com.creation.elfho.ncearesultstracker.StandardInfoActivity.finish()'。这是一种非常糟糕的方法,无法获得活动的静态引用。因此,活动实例将永远无法放入垃圾中collector@Viswa