我想实现一个简单的片段流程,但是使用导航组件实现多个后退堆栈
我的主要活动中有一个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)
我做错什么了吗,或者这不适用于多个导航图和导航拱门?
答案 0 :(得分:0)
我不想阻止您进行挖掘,但是一段时间以来,我一直在做同样的事情,而且看来到目前为止,对于诸如多重回堆之类的复杂情况,目前只有解决方法。
以下是Google员工如何解决此问题的示例(仍然是一种解决方法): https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt
在他们开始工作之前,我会先进行经典的实现。
尽管如此,祝您研究工作顺利!