android - 无法使用 dataBinding 从 xml 调用方法 ViewModel
问题描述
我想开始每秒钟增加一次计数。当我想通过使用方法停止计数器时stopCount()
,我不能OnClick
在 xml 中调用它。
我收到了这个错误:
e: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
.
<data>
<variable name="mainViewModel" type="com.ali.mvvm_livedata.MainViewModel"/>
<variable name="count" type="String"/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={mainViewModel.liveData}"
android:onClick="@{() -> mainViewModel.stopCount()}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@={mainViewModel.liveData}"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
</android.support.constraint.ConstraintLayout>
这是我的视图模型
class MainViewModel : ViewModel() {
private val timer = Timer()
private lateinit var timmer: TimerTask
val liveData: MutableLiveData<String> = MutableLiveData()
fun getTime(): MutableLiveData<String> {
return liveData
}
fun count() {
var tempCount = 0
timmer = object : TimerTask() {
override fun run() {
tempCount++
Log.i("currentCount", tempCount.toString())
}
}
timer.scheduleAtFixedRate(timmer, 1000, 1000)
}
internal fun stopCount() {
timmer.cancel()
}
MainActivity 代码
@Inject
lateinit var mModelFactory: ViewModelFactory
private lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
mainViewModel = ViewModelProviders.of(this, mModelFactory).get(MainViewModel::class.java)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
binding.mainViewModel = mainViewModel
binding.lifecycleOwner = this
mainViewModel.count()
}
解决方案
你必须删除内部(有趣的 stopCount 前面)
推荐阅读
- sql - Upsert 和跟踪旧值
- json - 使用 Imgur API 访问 JSON 数组时遇到问题
- php - WordPress - 如何使用 PHP 运行复杂的查询
- javascript - Interactjs:随机错误:TypeError:无法读取未定义的属性(读取“左”)
- php - 使用 PHP 调整 JPG 大小的内存错误
- python - 如何在 Python 中打印子元素?
- python - 为什么在 pandas 中指定索引列会显着增加 csv 的读取时间?
- node.js - 如何将数据从 expessjs 中间件传递到视图,
- pyinfra - Pyinfra 在目标主机内运行 python 代码
- sqlite - 如何在 sqli-kernel 下的 jupyter notebook 中打开现有的 sqlite 数据库?