android 选项卡片段导航
android tabs fragment navigation
我想问你关于 android 中一些不标准的导航模式。所以,我的问题如下所述。如果您没有答案或有些细节不明白,请不要减分。只需写评论,我就会改正我的东西。我不使用 ViewPager 或 TabHost。请查看图片以了解我预期的导航模型:
所以,我们 activity 有 3 个选项卡。所有选项卡都必须包含片段堆栈。第一个选项卡只有一个片段,因此没有后台逻辑。但是另外两个选项卡必须具有带有后退方式的片段逻辑。用户也可以随时切换所有标签。
为了实现标签,我使用了 BottomBar library。
我尝试使用 Stack[] 数组实现我的解决方案。并手动更改片段。但是我收到内存泄漏。经过多次操作,我明白这里无法找到解决方案。所以,我想问一下,如何使用 Android native backStack 实现解决方案。或任何其他解决方案..等待您的答复。谢谢
您可以使用以下代码将片段添加到返回堆栈。
fragmentTransaction.add(id, fragment, Tag(I usually do fragment.getclass().getName())).addToBackStack(backstackName(I usually do fragment.getclass().getName()))
添加第二个片段时使用下面的 repleaceFragentMethod。
private void replaceFragment(android.support.v4.app.Fragment fragment) {
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = getSupportFragmentManager();
manager.executePendingTransactions();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) { //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.frament_container, fragment, fragmentTag);
ft.addToBackStack(backStateName);
ft.commit();
}
}
要查找内存泄漏,请使用 LeakCanary(https://github.com/square/leakcanary)
我想问你关于 android 中一些不标准的导航模式。所以,我的问题如下所述。如果您没有答案或有些细节不明白,请不要减分。只需写评论,我就会改正我的东西。我不使用 ViewPager 或 TabHost。请查看图片以了解我预期的导航模型:
所以,我们 activity 有 3 个选项卡。所有选项卡都必须包含片段堆栈。第一个选项卡只有一个片段,因此没有后台逻辑。但是另外两个选项卡必须具有带有后退方式的片段逻辑。用户也可以随时切换所有标签。
为了实现标签,我使用了 BottomBar library。
我尝试使用 Stack[] 数组实现我的解决方案。并手动更改片段。但是我收到内存泄漏。经过多次操作,我明白这里无法找到解决方案。所以,我想问一下,如何使用 Android native backStack 实现解决方案。或任何其他解决方案..等待您的答复。谢谢
您可以使用以下代码将片段添加到返回堆栈。
fragmentTransaction.add(id, fragment, Tag(I usually do fragment.getclass().getName())).addToBackStack(backstackName(I usually do fragment.getclass().getName()))
添加第二个片段时使用下面的 repleaceFragentMethod。
private void replaceFragment(android.support.v4.app.Fragment fragment) {
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = getSupportFragmentManager();
manager.executePendingTransactions();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) { //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.frament_container, fragment, fragmentTag);
ft.addToBackStack(backStateName);
ft.commit();
}
}
要查找内存泄漏,请使用 LeakCanary(https://github.com/square/leakcanary)