Android 如何初始化视图绑定?

Android 如何初始化视图绑定?,android,kotlin,Android,Kotlin,如何初始化VievBinding?在AppCompactActivity 1.0.0版中,可以将布局传递给父构造函数,这样您就不会编写OnCreateView。 我是这样做的,但我想使用Viebbinding,但它对我不起作用。不显示文本。可以做些什么 class MainActivity : AppCompatActivity(R.layout.activity_main) { override fun onStart() { super.onStart()

如何初始化VievBinding?在AppCompactActivity 1.0.0版中,可以将布局传递给父构造函数,这样您就不会编写OnCreateView。 我是这样做的,但我想使用Viebbinding,但它对我不起作用。不显示文本。可以做些什么

    class MainActivity : AppCompatActivity(R.layout.activity_main) {

    override fun onStart() {
        super.onStart()
        var binding = ActivityMainBinding.inflate(layoutInflater)
        binding.hello.text = "Hello"
    }
}


var binding=ActivityMainBinding.充气(layoutInflater)

这将再次膨胀布局,您将获得与活动中已设置的视图不同的视图实例

尝试使用以下代码将“活动”视图绑定到活页夹。其中ROOT\u VIEW\u ID是布局中根视图的视图ID


var binding=ActivityMainBinding.bind(findViewById(根视图ID))*
*binding.hello.text=“hello”

xml中的布局视图应由
标记包围

<layout>
...// your activity view layout
</layout>

…//您的活动视图布局
尽管使用
\u Binding.inflate()
会更容易


版面膨胀不应在
onStart
中。它进入活动中的
onCreate
,进入片段中的
onCreateView

检查我读到的这个。如果您重新创建视图,那么一切都将正常工作。但我不需要那个。我想知道如何重新初始化ViewBinding。为什么它在
onStart
中而不是
onCreate
?问题是视图绑定,而不是databindingval绑定:YourActivityLayoutBinding是ViewBindingUtil.setContentView(这是R.Layour\u activity\u布局)返回视图绑定OK,很抱歉,我找到你了,setContentView可以通过DataBindingUtil调用,但它实际返回ViewBinding不知道为什么人们会否决它。但是这里的信息很有用。我遇到了同样的问题,并被解决了:是的,这会更容易。但是我需要创建BaseActivity,并且所有的活动都将从它继承。我不明白这是如何改变我所说的内容的?类MainActivity:AppCompatActivity(R.layout.Activity_main){private lateinit var binding:ActivityMainBinding override fun onCreate(savedInstanceState:Bundle){super.onCreate(savedInstanceState)binding=ActivityMainBinding.bind(findViewById(Window.ID_ANDROID_CONTENT))}无法工作,原因是:java.lang.ClassCastException:androidx.appcompat.widget.ContentFrameLayout无法强制转换为androidx.constraintlayout.widget.constraintlayout哦,非常有趣。我将相应地更改我的答案。
<layout>
...// your activity view layout
</layout>
class MainActivity : AppCompatActivity(R.layout.activity_main) {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.bind(findViewById(Window.ID_ANDROID_CONTENT).getChildAt(0))
    }
class MainActivity : AppCompatActivity {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater, R.layout.activity_main)
        setContentView(binding.root)
    }