android标签片段导航

时间:2016-12-08 18:30:55

标签: android android-fragments tabs android-navigation

我想问你关于android中的一些非标准导航模式。所以,我的问题描述如下。如果您没有答案或某些细节不明白,请不要减去。只是写评论,我纠正我的东西。我不使用ViewPager或TabHost。请参阅图片以了解我预期的导航模型:

Model

所以,我们有3个标签的活动。所有选项卡必须包含一堆片段。第一个选项卡只有一个片段,因此没有后端逻辑。但是另外两个选项卡必须具有回传方式的片段逻辑。用户也可以随时切换所有标签。

要实施标签,我使用了BottomBar library

我尝试使用Stack []数组实现我的解决方案。并手动更改片段。但我收到内存泄漏。经过多次操作,我理解这里无法找到解决方案。所以,我想问一下,我如何使用Android native backStack实现解决方案。或任何其他解决方案..等待你的答案。感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码将碎片添加到后台堆栈。

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