Android 数据绑定:多次调用自定义绑定适配器时,生成的代码中缺少 return 语句
2022-09-02 22:20:04
我正在使用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
})
}
在布局中,我只添加到其中一个TextInputEditText中,然后单击“运行”。一切都很好,没问题。app:onDrawableRightClick="@{() -> viewModel.doThing()}"
现在我回过头来添加到第二个TextInputEditText中。这次编译失败,出现 。app:onDrawableRightClick="@{() -> viewModel.doOtherThing()}"
error: missing return statement
该错误位于 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;
}
}
}
交换机外部既没有默认情况,也没有 return 语句。这会导致错误,但我非常确定在处理每个案例时不需要默认情况...无论如何,当我回到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 Preview。谢谢大家