我正在尝试在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
我在打击链接中附加了错误的屏幕截图-
答案 0 :(得分:0)
您不得使用Java Naming Conventions中定义的 CamelCase 来命名包裹。
包名用小写写,以避免与类或接口的名称冲突。
尤其是在使用 Android数据绑定库时,这是相关的。在您的情况下,ViewModel
被解释为一个类,因此ViewModel.MainActivityViewModel
被解释为其的静态内部类。
您必须将软件包重命名为viewmodel
才能使其正常工作。