class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainsBinding
private lateinit var viewModel: CounterViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView( R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_mains)
viewModel = ViewModelProvider(this)[CounterViewModel::class.java]
binding.viewModel = viewModel
binding.lifecycleOwner = this
}
}
class CounterViewModel : ViewModel() {
private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
get() = _counter
init {
_counter.value = 0
}
fun increment() {
_counter.value = (_counter.value ?: 0) + 1
}
fun decrement() {
_counter.value = (_counter.value ?: 0) - 1
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.wingderm.welcome.CounterViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="减少"
android:onClick="@{() -> viewModel.decrement()}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.counter}" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加"
android:onClick="@{() -> viewModel.increment()}" />
</LinearLayout>
</layout>
运行就报错
java.lang.NoSuchFieldError: No static field viewModel of type I in class Lcom/wingderm/lasermachpor/BR; or its superclasses (declaration of 'com.wingderm.lasermachpor.BR' appears in /data/app/~~lFztbEUFK57q_Z6uCjqI0g==/com.wingderm.lasermachpor-sUOS8X67QhcY0k4E-rmmNg==/base.apk!classes7.dex)
at com.wingderm.lasermachpor.databinding.ActivityMainsBindingImpl.setViewModel(ActivityMainsBindingImpl.java:92)
at com.wingderm.welcome.MainActivity.onCreate(MainActivity.kt:19)
你的项目是不是有多个模块,Android的打包机制决定了不能有同名的layout文件,故只能避免模块之间文件的重名,试着你的布局文件名activity_mains改一下,重新构建就行.