如何使用Navigation arch组件android实现多个Backstack?

时间:2019-10-18 12:52:00

标签: java android kotlin android-architecture-components

我想实现一个简单的片段流程,但是使用导航组件实现多个后退堆栈

我的主要活动中有一个viewpager,底部有选项卡,按这些选项卡或在viewpager幻灯片上滑动到下一个或上一个片段

我到目前为止所做的是

1-制作多个导航图,我认为这就是我们将如何制作多个后退堆栈的方法

nav-graph-1 导航图2 ..

2-我在viewpager中创建这样的片段

 public Fragment getItem(int position) {
        if (position == 0)
            return NavHostFragment.create(R.navigation.navigation_all_news);
        else if (position == 1)
            return NavHostFragment.create(R.navigation.navigation_my_news);
        else if (position == 2)
            return NavHostFragment.create(R.navigation.navigation_search);
        else if (position == 3)
            return NavHostFragment.create(R.navigation.navigation_forum);
        else
            return NavHostFragment.create(R.navigation.navigation_settings);
    }

3-我已经处理了片段中的背景印刷

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        navController = findNavController(this);

        OnBackPressedCallback callback = new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                navController.navigateUp();
                **//or navController.popBackStack()
                //Both have same effect :/**
            }
        };
        requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

    }

4,如果我走了

从viewpager第一项(fragment1)(fragment1.1) 然后按回车,弹出(fragment1.1)

但是

如果我去

(fragment1)(fragment1.1)
幻灯片 viewpager (fragment2)(fragment2.1)

或反之亦然

现在backStack包含3个片段(fragment2.1)和(fragment1.1)

我做错什么了吗,或者这不适用于多个导航图和导航拱门?

1 个答案:

答案 0 :(得分:0)

我不想阻止您进行挖掘,但是一段时间以来,我一直在做同样的事情,而且看来到目前为止,对于诸如多重回堆之类的复杂情况,目前只有解决方法。

以下是Google员工如何解决此问题的示例(仍然是一种解决方法): https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt

在他们开始工作之前,我会先进行经典的实现。

尽管如此,祝您研究工作顺利!