首页 > 解决方案 > 无法使用 kotlin 解决 Android Studio 中的数据绑定问题

问题描述

我正在尝试使用数据绑定将数据对象绑定到我的布局。但我收到类型不匹配的错误。而且我不明白原因,因为我是数据绑定的新手。我的代码很简单,希望有人能指导我理解我的错误。

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding
private var myName : MyName = MyName("Ahmed Rabee")

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

    binding.myName.text = myName.name
  }

数据类

data class MyName(var name: String = "" , var nickName: String = "")

布局

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    >

    <data>
        <variable
            name="myName"
            type="com.example.aboutme.MyName" />
    </data>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/my_name"
        style="@style/name_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@{myName.name}"
         />

这是我得到的错误,我不明白为什么它说类型不匹配。

我试图将它切换到这段代码,但它不起作用。因为它没有在布局上显示任何数据。

    binding.myName.text = myName.name

希望有人可以指导我。我的错在哪里

标签: androidvisual-studiokotlindata-binding

解决方案


使用 onCreate() 中的 MyName 对象初始化布局 myName 变量。请尝试在您的代码中进行以下更改。

class MainActivity : AppCompatActivity() {

 private lateinit var binding: ActivityMainBinding
 private var myName : MyName = MyName("Ahmed Rabee")

 override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)
 binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

 binding.myName = myName
 }
}

推荐阅读