我正在尝试调试一些代码,并希望列出Android当前堆中的片段。备用解决方案是简单地从支持经理中列出它们,因此从活动中的方法中列出:
output:
expand("per_label/myfile.{label}.{{chromosome}}.txt", label=LABELS)
不过,将其与Android的导航组件一起使用只会列出导航主机片段。
Log.i("fragments","Count : " + supportFragmentManager.fragments.toString())
关于SO的一些答案,例如Sergii Suvorov提供以下选择:
... I/fragments: [NavHostFragment{b1a2d20 (f8ec2420-b534-42df-89f0-0cb189610a26) id=0x7f080001}]
哪个简单地为我返回null
Log.i("fragments","Count : " + supportFragmentManager.findFragmentById(R.id.NAVIGATION)?.childFragmentManager?.fragments.toString())
在片段的方法中,我可以称呼以下
... I/fragments: null
它确实会返回期望的结果
Log.i("fragments", fragmentManager?.fragments.toString())
但是我没有从活动中看到如何做到这一点,也许那里有人知道魔咒?
答案 0 :(得分:0)
要从Activity
执行此操作,可以使用getBackStackEntryAt
方法。然后,根据反向堆栈条目的名称,您可以尝试搜索对应的
Fragment
。例如:
for (i in 0..supportFragmentManager.backStackEntryCount) {
val name = supportFragmentManager.getBackStackEntryAt(i).name
val fragment = supportFragmentManager.findFragmentByTag(name)
if (fragment != null) {
Log.i("TEST", "Fragment " + name + " : " + fragment)
for (j in 0..fragment.childFragmentManager.backStackEntryCount) {
val childName = fragment.childFragmentManager.getBackStackEntryAt(j).name
val childFragment = fragment.childFragmentManager.findFragmentByTag(childName)
if (childFragment != null) {
Log.i("TEST", "Child fragment of " + name + " : " + childFragment)
}
}
}
}
从这里,您可以看到所有片段,包括其子片段(如果有)。