Привязка данных Android: отсутствует оператор возврата в сгенерированном коде при вызове пользовательского адаптера привAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Привязка данных Android: отсутствует оператор возврата в сгенерированном коде при вызове пользовательского адаптера прив

Сообщение Anonymous »

Я использую библиотеку привязки данных Android и архитектуру MVVM. В макете xml я определяю переменную с именем viewModel типа myViewModel. В макете есть несколько TextInputEditText, для которых я использовал следующий адаптер привязки:

Код: Выделить всё

//makes the drawable_right of the TextView clickable
@SuppressLint("ClickableViewAccessibility")
@BindingAdapter("onDrawableRightClick")
inline fun TextView.setOnDrawableRightClick(crossinline f: () -> Unit) {
this.setOnTouchListener(View.OnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_UP) {
if (event.rawX >= this.right - this.paddingRight - this.compoundDrawables[DRAWABLE_RIGHT].bounds.width()) {
f()
return@OnTouchListener true
}
}
false
})
}
В макете я добавляю app:onDrawableRightClick="@{() -> viewModel.doThing()}" только к одному из TextInputEditText и нажимаю бегать. Все работает, без проблем.

Теперь я возвращаюсь и добавляю app:onDrawableRightClick="@{() -> viewModel.doOtherThing()}" в второй TextInputEditText. На этот раз компиляция завершается с ошибкой: отсутствует оператор возврата.

Ошибка находится в MyFragmentBindingImpl (сгенерированном) в этом блоке кода:

Код: Выделить всё

public final kotlin.Unit _internalCallbackInvoke(int sourceId ) {
switch(sourceId) {
case 1: {
// localize variables for thread safety
// viewModel
com.example.MyViewModel viewModel = mViewModel;
// viewModel != null
boolean viewModelJavaLangObjectNull = false;

viewModelJavaLangObjectNull = (viewModel) != (null);
if (viewModelJavaLangObjectNull) {

viewModel.doOtherThing();
}
return null;
}
case 2: {
// localize variables for thread safety
// viewModel
com.example.MyViewModel viewModel = mViewModel;
// viewModel != null
boolean viewModelJavaLangObjectNull = false;

viewModelJavaLangObjectNull = (viewModel) != (null);
if (viewModelJavaLangObjectNull) {

viewModel.doThing();
}
return null;
}
}
}
За пределами переключателя нет ни случая по умолчанию, ни оператора возврата. Это вызывает ошибку, но я был почти уверен, что регистр по умолчанию не является необходимым при обработке каждого случая... В любом случае, когда я возвращаюсь к xml и удаляю одну из привязок прослушивателя, MyFragmentBindingImpl меняется на это:

Код: Выделить всё

public final kotlin.Unit _internalCallbackInvoke(int sourceId ) {
// localize variables for thread safety
// viewModel
com.example.MyViewModel viewModel = mViewModel;
// viewModel != null
boolean viewModelJavaLangObjectNull = false;

viewModelJavaLangObjectNull = (viewModel) != (null);
if (viewModelJavaLangObjectNull) {

viewModel.doThing();
}
return null;
}
Компилятор снова доволен, но мне нужно использовать адаптер привязки более одного раза. Как я могу заставить библиотеку добавить оператор возврата? Есть ли обходной путь?

Я использую предварительную версию Android Studio 3.4. Всем спасибо

Подробнее здесь: https://stackoverflow.com/questions/534 ... calling-cu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»