gpt4 book ai didi

java - Android数据绑定(bind): Missing return statement in generated code when calling custom binding adapter more than once

转载 作者:行者123 更新时间:2023-12-01 19:02:15 24 4
gpt4 key购买 nike

我正在使用 android 数据绑定(bind)库和 MVVM 架构。在 xml 布局中,我定义了一个名为 viewModel、类型为 myViewModel 的变量。该布局有几个 TextInputEditText,我使用了以下自定义绑定(bind)适配器:

//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。这次编译失败,并出现错误:缺少 return 语句

错误出现在 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;
}
}
}

switch 之外既没有默认情况,也没有 return 语句。这会导致错误,但我非常确定处理每种情况时都不需要默认情况...无论如何,当我返回 xml 并删除监听器绑定(bind)之一时,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;
}

编译器再次高兴,但我需要多次使用绑定(bind)适配器。如何让库添加返回语句?有解决办法吗?

我正在使用 Android Studio 3.4 预览版。谢谢大家

最佳答案

@SuppressLint("ClickableViewAccessibility")
@BindingAdapter("onDrawableEndClick")
fun setOnDrawableEndClick(view: TextView, listener: OnCompoundDrawableClickListener?) {
val padding = 10
if (listener != null) {
view.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
if (view.compoundDrawables[DRAWABLE_RIGHT] == null) return@setOnTouchListener false
else if (event.rawX >= (view.right - view.compoundDrawables[DRAWABLE_RIGHT].bounds.width() - padding)) {
listener.onDrawableEnd()
return@setOnTouchListener true
}
}
return@setOnTouchListener false
}
}
}

尝试这样的事情,我正在为监听器使用自定义接口(interface)(OnCompoundDrawableClickListener)

关于java - Android数据绑定(bind): Missing return statement in generated code when calling custom binding adapter more than once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com