如何解决堆栈计数为+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)
是回叫,告诉我单击了按钮。
现在,每当单击按钮时,我都会添加另一个片段。我不替换,因为如果我回去,我希望片段保持原样。
而且,如果我要从B
(E
)进入片段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,但是仅加载了两个片段B
和A
。然后在Back上返回B
,然后退出而不是退出,而是保留在B -> A
片段上,即单击后退出,而第三次单击则退出。
请帮助我。如果您不了解某些内容,请提出疑问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。