Android 底部导航 - 维护 Activity 状态

Android Bottom Navigation - Maintaining Activity State

我知道在使用 Bottom Navigation 时建议使用 Fragments 而不是 Activities。由于目前的设计,我想避免必须转换所有 Activities

设计: 我正在使用 Bottom Navigation 栏,如图所示

每个选项卡都是一个 Activity。当您点击任何选项卡时,它会启动 activity、startActivity(new Intent(getApplication(), TabActivityName.class));。问题是当您在这些选项卡之间切换时,Activity 的状态会丢失。

例如:

  1. 单击“音乐”选项卡(显示艺术家列表)
  2. 单击“音乐”选项卡中的艺术家以显示唱片目录 fragment
  3. 切换到“视频”选项卡
  4. 切换回“音乐”标签。 (我希望艺术家的 discographyFragment 仍然显示,但它又回到了主要的艺术家列表 fragment

我尝试过的事情:

  1. 将每个选项卡 Activities 更改为 android:launchMode="singleTask"android:alwaysRetainTaskState="true" 这只会在您切换到当前 activity 之前启动的选项卡时保留数据。
  2. 将每个选项卡 Activities 更改为 android:launchMode="singleInstance"android:alwaysRetainTaskState="true" 但这会产生创建多个应用程序选项卡的不良效果。

关于如何保持 Activity 的状态以及切换标签时加载哪个 Fragment 的任何其他想法?

您可以在活动中使用 FragmentStatePagerAdapter。但是,您应该更新到片段,它们旨在处理您的情况。迁移还不错,大部分逻辑都可以简单地复制过来。

我当前的应用程序具有相同类型的设计。底部菜单有不同的启动活动的图标,每个 activity 都有片段。

我在启动底部菜单活动之前使用 FLAG_ACTIVITY_REORDER_TO_FRONT 解决了这个问题。

    case R.id.ic_house:
                        Intent intent1=new Intent(context, HomeActivity.class);
                        intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                        context.startActivity(intent1);
                        break;
    case R.id.ic_more:
                        Intent intent2=new Intent(context, MoreActivity.class);
                        intent2.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                        context.startActivity(intent5);
                        break;

这个问题已有 3 年历史,但也许其他人认为此解决方案有帮助。