Я хочу начать увеличивать счет с каждым вторым проходом. Когда я хочу остановить счетчик с помощью метода 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>
Вот моя ViewModel
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()
}