Привязка EditText из View в Kotlin не работает

#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:

Если вы говорите о привязке данных, и я предполагаю, что у вас уже есть это в ваших зависимостях.

Тогда…

  1. Проверьте, содержали ли вы свой xml mainLayout с <layout></layout>

  2. Проверьте, создали ли вы экземпляр этого макета поверх onCreate в вашем MainActivity. Например: private lateinit var mainBinding: ActivityMainBinding

  3. Используйте этот экземпляр / переменную, чтобы также получить EditText для ex: mainBinding.itemsDatePicker