我的应用程序中有一个片段 A。
从片段 A,我正在移动到片段 B。
请注意,我在 Fragment A 上添加了 Fragment B(不替换 Fragment。)
现在,当我从片段 B 回到片段 A 时,我必须调用片段 A 的方法,这就是为什么我在片段 A 的生命周期方法中调用该方法:在onResume(),onViewCreated()
但是我注意到通过将 log 放在这些方法没有调用的方法中意味着我没有在 logcat 中获取 Log 并且我在这两个方法中调用的方法没有执行。
可能是什么问题?谢谢。
我正在做如下供您参考:
override fun onResume() {
super.onResume()
Log.e("onResume 1","onResume 1")
(activity as HomeActivity).updateToolbar(false)
setLanguageSpecificData()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("onViewCreated","onViewCreated")
setLanguageSpecificData()
}
问题:
您在问题中提到的方式:
我在片段 A 上添加片段 B(不替换片段。)
因此,基于replace
&调用的生命周期方法之间存在差异add
。
如果你看看这个答案:https : //stackoverflow.com/a/21684520/9715339
就fragment的生命周期事件而言
onPause
,onResume
,onCreateView
等生命周期事件会在 情况下被调用,replace
但在情况下不会被调用add
此外,它也与活动生命周期相关。
解决方案:
查看您的代码,您希望在当前可见片段更改或换句话说backstack
更改时更新某些内容。
为此,您可以在您的活动中执行此操作:
supportFragmentManager.addOnBackStackChangedListener {
//when backstack changes get the current fragment & do something with that info
val frg = supportFragmentManager.findFragmentById(R.id.root_container)
if (frg is AFragment){
// do something like updateToolbar(false)
} else if (frg is BFragment){
//something else
}
Log.d("FrgTest-",frg.toString())
}
在片段中你可以做requireActivity().supportFragmentManager
&休息会没事的。
读:
这只是 backstack 变化的一个例子。如果您想在片段之间进行通信,您也可以使用其他方式setFragmentResultListener
。
这可能会有所帮助:https : //developer.android.com/guide/fragments/communicate#kotlin
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句