Я связываю List
из Interfaces
с аргументом типа через привязку данных.
Интерфейс:
public interface MyInterface<T> {
T getValue();
}
ViewModel:
public class MyViewModel {
public ObservableField<List<MyInterface>> name = new ObservableField<>();
}
BindingAdapter:
@android.databinding.BindingAdapter("bind")
public static void bind(TextView textView, List<MyInterface> list) {
}
XML:
<data>
<variable
name="viewModel"
type="com.example.myname.playground4.MyViewModel"/>
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:bind="@{viewModel.name}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
Это работает, пока ViewModel
находится на Java.
Когда я конвертирую ViewModel
в Kotlin:
class MyKotlinViewModel {
val name = ObservableField<List<MyInterface<*>>>()
}
Я получаю ошибку в моей ActivityMainBindingImpl.java
:
Ошибка: несовместимые типы: объект не может быть преобразован в список
Вот ошибочный метод:
@Override
protected void executeBindings() {
long dirtyFlags = 0;
synchronized(this) {
dirtyFlags = mDirtyFlags;
mDirtyFlags = 0;
}
android.databinding.ObservableField viewModelName = null;
java.util.List viewModelNameGet = null;
com.example.fweigl.playground4.MyKotlinViewModel viewModel = mViewModel;
if ((dirtyFlags & 0x7L) != 0) {
if (viewModel != null) {
// read viewModel.name
viewModelName = viewModel.getName();
}
updateRegistration(0, viewModelName);
if (viewModelName != null) {
// read viewModel.name.get()
viewModelNameGet = viewModelName.get(); // error is here
}
}
// batch finished
if ((dirtyFlags & 0x7L) != 0) {
// api target 1
com.example.fweigl.playground4.BindingAdapter.bind(this.mboundView0, viewModelNameGet);
}
}
Кто-нибудь знает причину этого и / или как это исправить?
Вы можете попробовать сами с моим тестовым проектом @ https://github.com/fmweigl/playground4. (Рабочая) Java-версия находится на ветке 'master', (нерабочая) версия kotlin на ветке 'kotlin'.