safeUnbox () no se puede invertir
Estoy tratando de eliminar todas las advertencias de mi aplicación de Android y una de ellas es esta:
viewModel.value es un campo encuadrado pero debe estar sin encuadrar para ejecutar android: marcado. Esto puede causar NPE, por lo que el enlace de datos lo desempaquetará de manera segura. Puede cambiar la expresión y envolver explícitamente viewModel.value con safeUnbox () para evitar la advertencia
Donde el valor es genéricoObservableField
que viene de una superclase:
public abstract class BaseDataTypeViewModel<T> extends BaseObservable {
public final ObservableField<T> value = new ObservableField<>();
...
}
Y se extiende en algún lugar como unBoolean
:
public class CheckBooleanDataTypeViewModel extends BaseDataTypeViewModel<Boolean> {
...
}
Vi enenlace de datos - advertencia SafeUnbox que las advertencias suceden porque esta es unaBoolean
y no unboolean
, así que intenté agregar esto:android:checked="@={safeUnbox(viewModel.value)}"
en lugar deandroid:checked="@={viewModel.value}"
pero recibí un error diciendo que no puedo invertir elsafeUnbox()
método.
**** / error de enlace de datos **** Mensaje: la expresión android.databinding.DynamicUtil.safeUnbox (viewModelValue) no puede invertirse: no hay inverso para el método safeUnbox, debe agregar una anotación @InverseMethod al método para indicar qué método se debe usar al usarlo en expresiones de enlace bidireccionales
Entiendo correctamente los 2 problemas separados, pero ¿tengo que vivir con la advertencia para evitar el error o es su solución para evitar tanto la advertencia como el error? Qué pasa con la@InverseMethod
está hablando? No logré agregar esta anotación porque el método proviene del paquete de Android.