Я хочу использовать привязку данных с моделью представления, как описано здесь
Итак, вот выдержки:
макет:
<data class="FragmentEditPersonDataBinding">
<import type="com.unludo.interview.persons.edit.Converter"/>
<variable
name="viewmodel"
type="com.unludo.interview.persons.edit.PersonEditViewModel" />
[...]
<EditText
android:id="@+id/editBirthday"
android:inputType="date"
android:text="@={Converter.dateToString(viewmodel.birthday)}"
преобразователь:
object Converter {
@InverseMethod("stringToDate")
@JvmStatic
fun dateToString(
view: EditText, oldValue: String,
value: Date
): String {
val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE)
return sdf.format(value)
}
@JvmStatic
fun stringToDate(
view: EditText, oldValue: String,
value: String
): Date {
val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE)
return sdf.parse(value)
}
}
модель просмотра:
class PersonEditViewModel {
var birthday: Date = GregorianCalendar(1993, 5, 19).time
...
Теперь я получаю эту ошибку при сборке:
e: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException:
Found data binding errors.
****/ data binding error ****msg:cannot find method dateToString(java.util.Date)
in class com.unludo.interview.persons.edit.Converter
[...]
- 134:78 ****\ data binding error ****
Я использую последнюю альфа-версию привязки данных, поэтому мне интересно, может ли быть ошибка в библиотеке.
Спасибо за любую помощь!
--- Обновить
Если я напишу конвертер так, то он компилируется, но это не соответствует документации. Есть идеи, почему?
object Converter {
@InverseMethod("stringToDate")
@JvmStatic
fun dateToString(
value: Date
): String {
val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE)
return sdf.format(value)
}
@JvmStatic
fun stringToDate(
value: String
): Date {
val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE)
return sdf.parse(value)
}
}
dateToString
. - person Jeel Vankhede   schedule 05.04.2019@file:JvmName("Converter")
. - person Jeel Vankhede   schedule 05.04.2019