具有多个活动的Android后台堆栈

时间:2015-03-26 19:07:16

标签: android android-intent back onbackpressed

我有一些活动,无法找到使其与后台堆叠一起工作的方法。

有没有办法做到这一点:

MainActivity - >(intent)subActivity - >(intent)subsubActivity->(back press)subActivity-> *(back press)MainActivity

*这是我遇到问题的地方。由于我来自我的subsubActivity,甚至认为我在清单中使用了android:noHistory =“true”,它不会回到主要活动。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这是在调用startActivityForResult中使用onActivityResult和覆盖Activity的组合的完美候选。

假设你有Activity A,它开始Activity B(我们无法移回),从Activity C开始:

Activity A将以您现在的方式致电Activity B。但是,Activity B会拨打startActivityForResult(Intent, int)而不是startActivity(Intent)。这样,当我们从Activity C返回时,我们可以在finish()上致电Activity B并返回Activity A,如下所示:

public class ActivityB extends Activity {

    private static final int REQUEST_CODE_ACTIVITY_C = 1001; 

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE_ACTIVITY_C) finish(); // If coming back from Activity C, finish()
    }

    private void openActivityC(){
        Intent intent = new Intent(this, ActivityC.class);
        startActivityForResult(intent, REQUEST_CODE_ACTIVITY_C);
    }

}

现在,当您致电openActivityC()时,您确保从onActivityResult()返回时会调用Activity C,从而允许您结束Activity并返回回到Activity A

您可以提供更具体的操作(例如设置/检查结果代码(例如,如果它取消(Activity.RESULT_CANCELED)或成功(Activity.RESULT_OK))状态,以更好地确定调用的内容Activity应该这样做。

希望这有助于解释一下。

编辑:也是事后的想法,如果你没有机会回到活动B,那么@Kay解决了在调用Intent之后调用finish()的问题对于活动C来说,这是最简单的方法。

答案 1 :(得分:0)

如果我得到了你想要的东西你可以使用startActivities一系列的意图,这些意图将一个接一个地激活1 - > activity2-> activity3 -back-activity2 -back-acitivty1