我有一個由 Google 推薦的一個活動和幾個片段組成的應用程式。其他細節
主要活動
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
println("Activity creation")
val binding = ActivityMainBinding.inflate(layoutInflater)
println("Activity creation part 2")
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
User.initSharedPref(this)
}
分段
private lateinit var mylist: MutableList<String>>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
println("Fragment creation")
mylist = User.loadScenarioList()
}
用戶
object User
{
private lateinit var sharedPref : SharedPreferences
fun initSharedPref(context: Context){
sharedPref = context.getSharedPreferences("JeuDePisteKtPreferenceFileKey",Context.MODE_PRIVATE)
}
fun loadList(): MutableList<String>> {
val json = sharedPref.getString(KEY_LIST, "") ?: ""
if (json == "") return mutableListOf()
return Json.decodeFromString(json)
}
}
遇到的問題
當我開始活動時,它會初始化一個變數sharedPref ,如代碼所示。
但是當在片段 onCreate 中我使用這個變數 ( mylist = User.loadScenarioList()) 時,活動中的系結線失敗,Binary XML file line #31: Error inflating class androidx.fragment.app.FragmentContainerView如下面的 logcat 所示
Logcat & 錯誤
這是完整的 logcat,我們可以看到第二個 sout 丟失了,但此時沒有拋出錯誤。

uj5u.com熱心網友回復:
這里的問題來自創建呼叫的順序
我們可以在更正后的代碼 logcat 中看到

活動 onCreate 首先被呼叫,但在恢復活動 OnCreate 之前,第一個 inflate 呼叫片段 OnCreate。
所以片段 onCreate 中使用的每個變數都應該在 inflate 呼叫之前初始化
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342715.html
標籤:安卓 科特林 android-fragments 布局充气机
上一篇:切換片段時導航重置
