Android 底部导航 - 维护 Activity 状态
Android Bottom Navigation - Maintaining Activity State
我知道在使用 Bottom Navigation
时建议使用 Fragments
而不是 Activities
。由于目前的设计,我想避免必须转换所有 Activities
设计:
我正在使用 Bottom Navigation
栏,如图所示
每个选项卡都是一个 Activity
。当您点击任何选项卡时,它会启动 activity、startActivity(new Intent(getApplication(), TabActivityName.class));
。问题是当您在这些选项卡之间切换时,Activity
的状态会丢失。
例如:
- 单击“音乐”选项卡(显示艺术家列表)
- 单击“音乐”选项卡中的艺术家以显示唱片目录
fragment
。
- 切换到“视频”选项卡
- 切换回“音乐”标签。 (我希望艺术家的
discographyFragment
仍然显示,但它又回到了主要的艺术家列表 fragment
)
我尝试过的事情:
- 将每个选项卡
Activities
更改为 android:launchMode="singleTask"
和 android:alwaysRetainTaskState="true"
这只会在您切换到当前 activity
之前启动的选项卡时保留数据。
- 将每个选项卡
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 年历史,但也许其他人认为此解决方案有帮助。
我知道在使用 Bottom Navigation
时建议使用 Fragments
而不是 Activities
。由于目前的设计,我想避免必须转换所有 Activities
设计:
我正在使用 Bottom Navigation
栏,如图所示
每个选项卡都是一个 Activity
。当您点击任何选项卡时,它会启动 activity、startActivity(new Intent(getApplication(), TabActivityName.class));
。问题是当您在这些选项卡之间切换时,Activity
的状态会丢失。
例如:
- 单击“音乐”选项卡(显示艺术家列表)
- 单击“音乐”选项卡中的艺术家以显示唱片目录
fragment
。 - 切换到“视频”选项卡
- 切换回“音乐”标签。 (我希望艺术家的
discographyFragment
仍然显示,但它又回到了主要的艺术家列表fragment
)
我尝试过的事情:
- 将每个选项卡
Activities
更改为android:launchMode="singleTask"
和android:alwaysRetainTaskState="true"
这只会在您切换到当前activity
之前启动的选项卡时保留数据。 - 将每个选项卡
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 年历史,但也许其他人认为此解决方案有帮助。