查找上一个活动片段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找上一个活动片段相关的知识,希望对你有一定的参考价值。
我有4个片段。以下是导航流程
[片段1] - > [片段2] - > [片段3]
[片段4] - > [片段3]
如果用户在[片段3]的背面按4从片段3(即[片段4] - > [片段3])进入片段3,它应该转到[片段1]。
我想如果我能够找到之前的片段那么将很容易重定向到[fragment 1]
。有什么方法可以找到已被替换的先前片段是什么?
我尝试过fragmentManager.getBackStackEntryAt(fragmentManager.backStackEntryCount - 1),但只显示当前片段的一个条目。
片段管理器看起来像这样。
onBackPressed
的Fragment 3
我做了这样的事。
override fun onBackPressed(): Boolean {
args.host.hideKeyboard()
if (redirectToProductList) {
args.host.activity?.let {
if (it.supportFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)) {
openFirstFragment(it, SupportFragment(MainActivity.SalesRepProduct))
return true
}
}
}
return args.host.childFragmentManager.popBackStackImmediate()
}
答案
我已经发布了这个问题并在那里提供答案请尝试搜索
资源 :
override fun onBackPressed() {
if (tabLayout.selectedTabPosition != 0) {
tabLayout.getTabAt(0)?.select()
} else {
super.onBackPressed()
}
}
另一答案
我解决了这个问题。我没有将片段添加到backstack中。
fragmentManager.beginTransaction()
.addToBackStack(newFragment.javaClass.name)
.commit()
然后我发现了之前的片段。
override fun onBackPressed(): Boolean {
args.host.hideKeyboard()
val index = args.host.fragmentManager.backStackEntryCount - 2
if (index >= 0) {
val prevFrag = args.host.fragmentManager.getBackStackEntryAt(index)
if (prevFrag.name == SearchContainerPresenter::class.java.name)
args.host.activity?.let {
if (it.supportFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)) {
openFirstFragment(it, SupportFragment(MainActivity.SalesRepProduct))
return true
}
}
else
return args.host.childFragmentManager.popBackStackImmediate()
}
return args.host.childFragmentManager.popBackStackImmediate()
}
另一答案
你可以这样的用户监听器,
supportFragmentManager.addOnBackStackChangedListener {
val fragment = supportFragmentManager.findFragmentById(R.id.container)
//Write your logic here
}
以上是关于查找上一个活动片段的主要内容,如果未能解决你的问题,请参考以下文章