Kotlin数据绑定问题类型不匹配

时间:2019-05-18 05:18:15

标签: android kotlin data-binding

我正在尝试在Android的小型kotlin项目中实现数据绑定。但是在将viewmodel分配给数据绑定时会出错。

在这个小项目中我有三堂课 1.用户-数据模型类 2. ActivityMainViewModel-视图模型类 3. MainActivity-将实现数据绑定的类

但是在MainActivity.kt中,将viewmodel设置为binding时出现错误。

User.kt

class User() {
    var emailId: String= ""
    var password: String= ""

    constructor(emailId: String, password: String) : this() {
        this.emailId = emailId
        this.password = password
    }
}

MainActivity.kt

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

        var myviewmodel= MainActivityViewModel()
        val userObj = User("abc@gmail.com","123344")
        myviewmodel.setUser(userObj)

        binding.viewModel = myviewmodel
    }
}

MainActivityViewModel.kt

class MainActivityViewModel() : ViewModel() {
    val userObj = User()

    fun setUser(user: User){
        userObj.emailId = user.emailId
        userObj.password = user.password
    }
}

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<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="viewModel"
                        type="testing.justrade.databindingissue.ViewModel.MainActivityViewModel"
                />
        </data>
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".View.MainActivity">
                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Hello World!"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintTop_toTopOf="parent"/>
        </LinearLayout>
</layout>

我收到此错误。

E:\--------------------------/ MainActivity.kt: (21, 17): Cannot access class 'ViewModel.MainActivityViewModel'. Check your module classpath for missing or conflicting dependencies

Type mismatch: inferred type is testing.justrade.databindingissue.ViewModel.MainActivityViewModel but ViewModel.MainActivityViewModel? was expected

我在打击链接中附加了错误的屏幕截图-

https://ibb.co/Y25dbTn

1 个答案:

答案 0 :(得分:0)

您不得使用Java Naming Conventions中定义的 CamelCase 来命名包裹。

  

包名用小写写,以避免与类或接口的名称冲突。

尤其是在使用 Android数据绑定库时,这是相关的。在您的情况下,ViewModel被解释为一个类,因此ViewModel.MainActivityViewModel被解释为其的静态内部类。

您必须将软件包重命名为viewmodel才能使其正常工作。