![](/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.