#android #kotlin #mvvm
#Android #kotlin #mvvm
Вопрос:
Я пытаюсь обновить EditText со страницы просмотра в Kotlin с помощью mvvm. Но когда инициализируется ViewModel, значение по умолчанию является обязательным, но когда я изменяю значение из EditText onClick listener, оно не обновляет пользовательский интерфейс.
xml
<EditText
android:id="@ id/itemsDatePicker"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@={itemviewmodel.selectedDateText}"
android:onClick="@{itemviewmodel.datePickerOnClick}"
android:hint="Select Date"
tools:ignore="AutoFill,TextFields" />
Модель просмотра
fun datePickerOnClick(view: View) {
showDatePicker.value=true
}
Вид
vm.showDatePicker.observe(this,androidx.lifecycle.Observer{ s->
val myCalendar: Calendar = Calendar.getInstance()
val date =
DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth -> // TODO Auto-generated method stub
myCalendar.set(Calendar.YEAR, year)
myCalendar.set(Calendar.MONTH, monthOfYear)
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
//This place should update the ui with selected date but not working as expected
vm.selectedDateText.value =DateHelper.getTodayDate(myCalendar.getTime())
}
DatePickerDialog(
this, date, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)
).show()
})
Любая помощь в преодолении этой проблемы очень ценится.
Заранее спасибо. 🙂
Комментарии:
1. Выполняется ли этот метод onClick? И можете ли вы добавить весь код виртуальной машины?
Ответ №1:
Если вы говорите о привязке данных, и я предполагаю, что у вас уже есть это в ваших зависимостях.
Тогда…
-
Проверьте, содержали ли вы свой xml mainLayout с
<layout></layout>
-
Проверьте, создали ли вы экземпляр этого макета поверх onCreate в вашем MainActivity. Например:
private lateinit var mainBinding: ActivityMainBinding
-
Используйте этот экземпляр / переменную, чтобы также получить EditText для ex:
mainBinding.itemsDatePicker