Android:Kotlin:MVM:为什么viewModel.onButtonClicked()会导致应用程序崩溃



Logcat消息:

java.lang.IllegalStateException:在android的父或祖先上下文中找不到方法@={((->viewModel.onBtnClicked(((View(:在视图类androidx.appcompat.widget.AppCompatButton上定义的onClick属性,id为"button">

文件1:activity_main.xml

<data>
<variable
name="viewModel"
type="com.wingsquare.databindingdemo.MainViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:onClick = "@={() -> viewModel.onBtnClicked()"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

文件2:MainActivity.kt

类MainActivity:AppCompatActivity(({override fun onCreate(savedInstanceState:Bundle?({super.onCreate(savedInstanceState(

val binding: ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)
// val binding = ActivityMainBinding.inflate(layoutInflater)
val mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)
binding.viewModel = mainViewModel
binding.lifecycleOwner = this
}

}

文件3:MainViewModel.kt

类MainViewModel:ViewModel(({

fun onBtnClicked() {
Log.d("MainViewModel", "MainViewModel")
}

}

Logcat消息有点误导。几个小时以来,我一直面临着同样的错误,检查其他一切,我认为这是根本原因。但对于这个特殊的错误,你所要做的就是关注";{}";。这是android中数据绑定的缺点之一。很多时候,在编译时你不会遇到任何错误,如果你遇到了!那真的没有帮助!

另一件需要考虑的事情是中的"=">

android:onClick = "@={() -> viewModel.onBtnClicked()}"

用于双向绑定。在这种情况下你不需要它。你可以在安卓官方文档上阅读

android:onClick="{((->viewModel.onBtnCicked((}">

  • 在末尾添加一个括号
  • 此外,您可能希望删除@

相关内容

  • 没有找到相关文章

最新更新