Android底部导航 - 维护活动状态

时间:2017-05-16 21:23:13

标签: android android-fragments android-activity tabs bottombar

我知道在使用Fragments时,建议使用Activities代替Bottom Navigation。由于当前的设计,我希望避免转换所有Activities

设计: 我使用的Bottom Navigation栏显示为enter image description here

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

例如:

  1. 点击音乐标签(显示艺术家列表)
  2. 点击“音乐”标签中的艺术家以显示唱片目录fragment
  3. 切换到视频标签
  4. 切换回音乐标签。 (我希望艺术家discographyFragment仍在展示,但它又回到主要艺术家名单fragment
  5. 我尝试的事情:

    1. 将每个标签Activities更改为android:launchMode="singleTask"android:alwaysRetainTaskState="true"如果您要切换到在当前activity之前启动的标签,则仅保留数据。
    2. 将每个标签Activities更改为android:launchMode="singleInstance"android:alwaysRetainTaskState="true"但这会产生创建多个应用标签的不良影响。
    3. 关于如何在切换标签时保持Activity的状态以及加载Fragment的任何其他想法?

2 个答案:

答案 0 :(得分:2)

您可以在活动中使用FragmentStatePagerAdapter。但是,您应该更新到片段,它们旨在处理您的情况。迁移并不是那么糟糕,大多数逻辑都可以简单地复制过来。

答案 1 :(得分:0)

我当前的应用具有相同的设计。底部菜单具有启动活动的不同图标,并且每个活动中都有片段。

在启动底部菜单活动之前,我通过使用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年历史了,但也许其他人认为此解决方案很有帮助。