MHo*_*gge 4 android warnings android-databinding
我正在尝试消除我的Android应用程序的所有警告,其中之一就是:
viewModel.value是一个盒装字段,但需要取消装箱才能执行android:checked.这可能会导致NPE,因此数据绑定将安全地取消它.您可以更改表达式并使用safeUnbox()显式包装viewModel.value以防止出现警告
其中value是ObservableField来自超类的泛型:
public abstract class BaseDataTypeViewModel<T> extends BaseObservable {
public final ObservableField<T> value = new ObservableField<>();
...
}
Run Code Online (Sandbox Code Playgroud)
并在某处作为一个扩展Boolean:
public class CheckBooleanDataTypeViewModel extends BaseDataTypeViewModel<Boolean> {
...
}
Run Code Online (Sandbox Code Playgroud)
我看到数据绑定 - safeUnbox警告发生警告,因为这是一个Boolean而不是一个boolean,所以我试图添加这个:android:checked="@={safeUnbox(viewModel.value)}"而不是android:checked="@={viewModel.value}"然后我得到一个错误说我无法反转safeUnbox()方法.
****/数据绑定错误****msg:表达式android.databinding.DynamicUtil.safeUnbox(viewModelValue)无法反转:方法safeUnbox没有反转,必须在方法中添加@InverseMethod注释才能指示在双向绑定表达式中使用它时应该使用哪个方法
我正确地理解了2个分离的问题,但是我必须忍受警告以避免错误,或者他们是避免警告和错误的解决方案吗?这@InverseMethod是怎么回事?我没有设法添加这个注释,因为该方法来自android包.
Ben*_* P. 10
我没有以这种特殊方式使用Android架构组件或数据绑定库,但我认为我仍然可以提供帮助.
在你的XML中,你有这个:
android:checked="@={viewModel.value}"
Run Code Online (Sandbox Code Playgroud)
该系统是给你一个警告,因为它要你知道,在情况viewModel.value是null,它会做一些特殊的(行为就好像它是false不是,大概).它通过该safeUnbox()方法完成此操作.
要解决警告,建议将safeUnbox()呼叫显式化.你不能这样做,因为没有"反"的safeUnbox()去回从boolean到Boolean.
但它听起来并不像你必须使用safeUnbox(); 你可以创建自己的方法转换Boolean到boolean,然后你可以使用建议注释来声明该方法将转换回从boolean到Boolean.
public class MyConversions {
@InverseMethod("myBox")
public static boolean myUnbox(Boolean b) {
return (b != null) && b.booleanValue();
}
public static Boolean myBox(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以将XML更改为:
android:checked="@={com.example.stackoverflow.MyConversions.myUnbox(viewModel.value)}"
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.如果事实证明我离开基地,请告诉我; 我想更多地了解这个话题.
我从https://medium.com/google-developers/android-data-binding-inverse-functions-95aab4b11873中学到的答案中的大部分内容
| 归档时间: |
|
| 查看次数: |
6194 次 |
| 最近记录: |