微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

堆栈计数为+1 Android Fragment

如何解决堆栈计数为+1 Android Fragment

在应用程序中,我有5个片段。所有都是相同片段类的实例。单击按钮后,我将加载下一个片段。我要实现的流程是:

A -> B -> C -> D -> E 

现在,在按钮上单击E,我想回到B。

A -> B -> C -> D -> E -> (remove E,D,C from backstack) -> B

然后在B上按Back,我要转到A,然后在B按上退出

当我加载第一个片段时:

var screenFragment = ScreenFragment.getInstance(listofScreenIds[0],this)
        supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container,screenFragment,listofScreenIds[0])
            .addToBackStack(listofScreenObj[0])
            .commit()

listfdScreenIds是Strins的列表,this中的 ScreenFragment.getInstance(listofScreenIds[0],this)是回叫,告诉我单击了按钮。

现在,每当单击按钮时,我都会添加一个片段。我不替换,因为如果我回去,我希望片段保持原样。 而且,如果我要从BE)进入片段E -> B,请检查它是否已添加,因此我在此之后弹出所有片段,然后使用{{1} }添加它。因为既然已经添加了它,所以我不想添加它。

replace

问题在于,当我回到片段var screenFragment = hashMapFragments[screenId] if (screenFragment != null) { if( !screenFragment.isAdded) { println("screenId: "+screenId) supportFragmentManager.beginTransaction() .add(R.id.fragment_container,screenId) .addToBackStack(screenId) .commit() } else{ for (i in supportFragmentManager.backStackEntryCount - 1 downTo 0) { if (supportFragmentManager.getBackStackEntryAt(i).name != screenId) { supportFragmentManager.popBackStackImmediate(supportFragmentManager.getBackStackEntryAt(i).name,FragmentManager.POP_BACK_STACK_INCLUSIVE) } else { break } } supportFragmentManager.beginTransaction() .replace(R.id.fragment_container,screenId) .addToBackStack(null) .commit() } } 时,backStackCount为3,但是仅加载了两个片段BA。然后在Back上返回B,然后退出而不是退出,而是保留在B -> A片段上,即单击后退出,而第三次单击则退出

请帮助我。如果您不了解某些内容,请提出疑问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。