我有X、A、B片段,我使用导航架构组件在它们之间导航。
片段A、B特异性,但片段X可以是任何(C、D、...);
底部导航中的片段A和B及其“导航图标”始终在屏幕上,这意味着用户可以随时从任何片段(包括A和B)转到A或B:
<代码>X-
<代码>X-
<代码>A-
<代码>A-
//另一种方式
我的问题是:
<代码>X-
如果用户从
X
开始,到达?
并开始通过“返回”按钮返回,他会多次抛出A
、B
:
用户后退:
<代码>-
但我想从Backback中“排除”已经存在的片段:
<代码>-
如果用户导航:
<代码>X-
我想看看:
<代码>A-
不是:
<代码>A-
我正在尝试用Pop To来做这件事,但它只能在一个具体的片段上返回我。我需要返回我开始的X片段,而不是硬编码。包容性和单顶与此无关。
我不确定我能用基本的导航组件做到这一点,所以我需要你的建议。如果我做不到,我应该用什么方法?有什么好的做法吗?
UPD:
我正在使用全局点在片段之间导航。这就是我的导航方式:
右|底链是X,我可以使用底部导航从其中任何一个导航到未更改的片段。这是一款单活动应用程序,我正在使用它导航:
//Using global points
findNavController(R.id.host).navigate(R.id.toLibrary)
在fragmentTransaction中,而不是使用addToBackStack()或add(…)使用fragmentTransaction。替换(int containerViewId,Fragment Fragment,String tag)
以下解决方案采用片段可见性技术,以便在onBackPressed()时管理片段。
我们在调用每个
片段
时为它分配一个标签
fragmentManager.beginTransaction()
.replace(R.id.FragmentHolder, Fragment_A OR Fragment_B OR Fragment_ANY, "A or B or ANY")
.addToBackStack(tag).commit();
请记住,您必须为要处理的任何片段分配一个标记。
我们将处理public void onBackPressed()
。
你必须忽略超级。onBackPressed()因为,我们不想在按下后退按钮时取消onBackPressed方法影响backbackback(按原样)。此外,我们希望自己处理回撤。
干得好
@Override
public void onBackPressed() {
if(isVisible("A")) { //Go some where else you wanna go }
else if(isVisible("B")){ //Go some where else you wanna go }
else if(isVisible("X or any"){ //Go some where else you wanna go }
else { //Go default page }
}
public boolean isVisible(String tag){
try {
Fragment fragment = fragmentManager.findFragmentByTag(tag);
if (fragment != null && fragment.isVisible())
return true;
else
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
当按下后退按钮时,我们检查哪个片段已经可见,并将用户重定向到相应的前置片段。
对于Ex:A-
我使用这个技术发布了一个应用程序,一切都很好。
java.lang.runtimeException:无法启动活动ComponentInfo{com.farmbuy/com.farmbuy.farmer.farmersactivity}:Android.view.farmersactivity:二进制XML文件行#49:二进制XML文件行#49:在Android.app.activitythread.performLaunchActivity(
我是Android Jetpack导航架构的新手。我正在一个新应用程序上试用它。有一个活动和一些片段,其中两个是登录屏幕和电子邮件登录屏幕。我在我的导航XML中定义了这些片段。应用程序的流程如下: 登录屏幕→ <代码>电子邮件登录屏幕 我想要的是,在导航到电子邮件登录屏幕后,当我向后按时,应用程序退出。这意味着登录屏幕的后堆栈被删除了。我知道登录屏幕不应该这样工作,但我仍然只是在解决问题。 我遵循
我的问题是,当我点击操作栏项时,onOptionsItemSelected被调用,但不起作用。 我只希望后退按钮能工作。这是我的代码,这是在SherlockFragment文件中: 在onbackpressed中,当我们处于两个窗格模式时,或者当我们处于第一个片断(所以第二个片断为空),就绪为true。 如果我按下后退键,一切正常,碎片就会被替换掉。但当我点击action bar中的back按钮时
我正在尝试在我现有的应用程序中使用Jetpack的架构组件实现导航。 我有一个单一的活动应用程序,其中主要片段(。因此,当按下back时,将分离细节片段,并再次显示ListFragment。 对于导航架构,这是自动处理的。不是添加它被替换的新片段,因此片段视图被销毁,而是在按下back以重新创建视图时调用和。 我知道这是一个很好的模式,用于LiveData和ViewModel,以避免使用超过必要的