Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用导航arch组件android实现多个backbackback?_Java_Android_Kotlin_Android Architecture Components - Fatal编程技术网

Java 如何使用导航arch组件android实现多个backbackback?

Java 如何使用导航arch组件android实现多个backbackback?,java,android,kotlin,android-architecture-components,Java,Android,Kotlin,Android Architecture Components,我想使用导航组件实现一个简单的片段流,但有多个后台堆栈 我的主要活动中有一个viewpager,底部有选项卡,按下选项卡或在viewpager上滑动到下一个或上一个片段 到目前为止,我所做的是 1-制作多个导航图,我想这就是我们制作多个backbackback的方式 public Fragment getItem(int position) { if (position == 0) return NavHostFragment.create(R.navi

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

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

到目前为止,我所做的是

1-制作多个导航图,我想这就是我们制作多个backbackback的方式

 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);
    }
    @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);

    }
导航图-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);
    }
    @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);

    }
3-我在片段中处理过这样的背压

 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);
    }
    @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第一项(片段1)(片段1.1) 然后按back,弹出(fragment1.1)

但是

如果我去

(片段1)(片段1.1)
幻灯片查看页面 (片段2)(片段2.1)

或反之亦然

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


我是做错了什么,还是这对多个导航图和导航拱门不起作用?

我不想阻止你去挖掘,但我现在做了很长一段时间完全相同的事情,似乎到目前为止,对于复杂场景(如多个后向堆栈)只有解决办法

下面是一个来自谷歌的人如何解决这个问题的例子(这仍然是一个解决办法):

在他们开始工作之前,我会选择一个经典的实现


尽管如此,祝你在进一步的研究中好运

这是正确的,一旦我变得非常笨拙,我就放弃了这个理论。你知道当前版本的库是否已经支持多个图形,或者解决方法NavigationExtensions是否仍然有效吗?@David我们需要等待navigation 2.4.0-alpha01,你可以在这里跟踪进度