我在我的應用程式中有一個片段A。
從片段A中,我正在移動到片段B。
注意,我正在片段A上添加片段B(而不是替換片段)
。現在,當我從片段B回到片段A時,我必須呼叫片段A的一個方法,這就是為什么我在片段A的生命周期方法中呼叫該方法:在onResume(),onViewCreated()
。但是我注意到,在這兩個方法中加入日志,這些方法沒有被呼叫,意味著我沒有在logcat中獲得日志,而且我在這兩個方法中呼叫的方法沒有被執行。
這可能是什么問題?謝謝。
我的做法如下,供你參考:
我的做法如下,供你參考。
override fun onResume() {
super.onResume()
Log.e("onResume 1"/span>,"onResume 1"/span>)
(activity as HomeActivity).updateToolbar(false)
setLanguageSpecificData()
}
override fun onViewCreated(view。View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("onViewCreated"/span>,"onViewCreated"/span>)
setLanguageSpecificData()
}
uj5u.com熱心網友回復:
問題:
你在問題中提到的方式是:
你的問題是:
我在片段A上添加片段B(不是替換片段。
所以,基于replace & add呼叫的生命周期方法是有區別的。
如果你看一下這個答案:https://stackoverflow.com/a/21684520/9715339
就片段的生命周期事件而言,
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){
//做一些類似updateToolbar(false)的事情。
} else if (frg is BFragment){
//something else(frg is BFragment)。
}
Log.d("FrgTest-",frg.toString())
}
在fragment中,你可以做requireActivity().supportFragmentManager & 其他的就可以了。
閱讀:
這只是一個關于backstack變化的例子。如果你想在片段之間進行通信,你也可以使用其他方式,如setFragmentResultListener。
這可能有幫助。https://developer.android.com/guide/fragments/communicate#kotlin
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330158.html
標籤:
上一篇:異構智聯Wi-Fi6+藍牙模組,重新定義多屏互聯體驗!
下一篇:用抽象的基礎片段導航
