Android后退按钮 - 如何在导航到下一个活动和从下一个活动返回时保留父状态

时间:2018-04-04 12:35:10

标签: java android navigation

活动A在片段中有一个类别列表(RecyclerView)。单击某个项目时,将启动一个新的活动B,它还包含一个片段中的项目列表(RecyclerView),通过适配器: `

    myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           Intent dynamicCableView = new Intent(view.getContext(), CableOverview.class);
           dynamicItemView.putExtra("systemModel", systemModelList.get(position));
           view.getContext().startActivity(dynamicItemView);
        }`

点击其中一个活动C,其中包含与该项目相关的数据,基本上是这样的:

public void goToAnActivity(View view) {
Intent Intent = new Intent(this, AnActivity.class);
startActivity(Intent);
}

当从活动C通过后退按钮返回到其父活动B时,不存储先前的状态,因此项目列表消失了,而在我的理解中,它应该从堆栈中检索。而是调用onDestroy of B(不仅仅是C)。我不想保留活动C中的数据,而是回到应保持其状态的父级。它基本上应该记住选择哪个类别来显示其项目子集。我正在使用API​​ 25。

我尝试过:在B的片段或活动中覆盖onSaveInstanceState。废除碎片并将列表放入活动本身。但是,当导航回来时,savedInstanceState始终为null。

如何确保我的列表可以重新创建?

编辑:清单包含:

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.Launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

1 个答案:

答案 0 :(得分:0)

当我意识到问题实际上是OnDestroy在导航回来时总是被调用时,我找到了解决方案。感谢@gokhan,我知道它与启动模式有关。根据{{​​3}}回答,活动B在清单中需要这一行: 机器人:launchMode = “singleTop”