![](/img/trans.png)
[英]Android: Why won't this code run in onCreate, or how can I make it work without a thread?
[英]Why can't I initialize the variable before onCreate in Android development?
我是 Android 開發的新手。 當我使用 ViewBinding 訪問布局中的項目時,我遇到了關於在哪里初始化變量的問題。
正如您在代碼中看到的,我聲明了兩個實例變量,但只在 onCreate 方法之前初始化變量標記。
我的問題是,為什么我不能在 onCreate 方法之前像變量標記一樣初始化變量綁定,因為我可以在 onCreate 方法中訪問變量標記而不會出錯? 我做了一個測試,在 onCreate 之前初始化綁定,但程序崩潰了。
這是我的代碼:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private val tag = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "onCreate") // I can access to variable tag
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.startNormalActivity.setOnClickListener {
val intent = Intent(this, NormalActivity::class.java)
startActivity(intent)
}
binding.startDialogActivity.setOnClickListener {
val intent = Intent(this, DialogActivity::class.java)
startActivity(intent)
}
}
}
要直接或通過綁定對布局進行膨脹,您需要一個LayoutInflater
。 在onCreate
生命周期階段之前, Activity
無法使用布局充氣器等系統服務。 實例初始化過早。
您的tag
是用字符串文字初始化的,這在初始化階段肯定是可能的。
您不能在 OnCreate() 之前創建綁定。Bindings 是負責的自動生成的類,因此視圖層次結構在綁定到布局中帶有表達式的視圖之前不會被修改。 OnCreate() 是第一個 function 在創建 Activity 時調用。 有關活動生命周期的更多詳細信息,請參閱此處:
https://developer.android.com/guide/components/activities/activity-lifecycle
因此,當創建 Activity 時,您可以擴展您以 xml 文件的形式創建的布局。 在擴展布局之后,綁定過程被實例化。 膨脹布局的過程在 OnCreate() 中執行,您可以在代碼中看到:
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
因此,您不能在 OnCreate() 之前生成綁定,並且必須在 OnCreate 中完成或在擴展布局后隨時發布。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.