【问题标题】:Android back stack with multiple Activities具有多个活动的 Android 回栈
【发布时间】:2015-03-26 19:07:15
【问题描述】:

我有一些活动,但不知道如何让它与后台堆栈一起工作。

有没有办法做到这一点:

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

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

感谢您的帮助!

【问题讨论】:

  • 在子活动之间调用意图时调用finish()
  • 当你有片段时为什么要使用子活动。处理 backstack 会很容易。

标签: android android-intent back onbackpressed


【解决方案1】:

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

假设您有Activity A,它以Activity B 开头(我们无法返回),它以Activity C 开头:

Activity A 会像现在一样调用Activity B。但是,Activity B 将调用startActivityForResult(Intent, int) 而不仅仅是startActivity(Intent)。这样,当我们从Activity C返回时,我们可以在Activity B上调用finish()并返回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() 时,您确保从Activity C 返回时将调用onActivityResult(),从而允许您结束Activity 并返回到Activity A

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

希望这有助于解释一下。

编辑:也是事后的想法,如果你没有机会想要回到活动 B,那么 @Kay 在触发活动 C 的 Intent 后调用 finish() 的解决方案将是最简单的方法。

【讨论】:

    【解决方案2】:

    如果我得到了你想要的你可以使用startActivities 和一系列意图,这些意图将一个接一个地被触发 activity1->activity2->activity3 -back-activity2 -back-acitivty1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多