Java 如何使用导航arch组件android实现多个backbackback?
我想使用导航组件实现一个简单的片段流,但有多个后台堆栈 我的主要活动中有一个viewpager,底部有选项卡,按下选项卡或在viewpager上滑动到下一个或上一个片段 到目前为止,我所做的是 1-制作多个导航图,我想这就是我们制作多个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
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,你可以在这里跟踪进度