safeUnbox () não pode ser invertido
Estou tentando eliminar todos os avisos do meu aplicativo Android e um deles é o seguinte:
viewModel.value é um campo em caixa, mas precisa ser desmarcado para executar android: marcado. Isso pode causar o NPE, de modo que a Ligação de dados o descompacta com segurança. Você pode alterar a expressão e agrupar explicitamente viewModel.value com safeUnbox () para impedir o aviso
Onde o valor é genéricoObservableField
que vem de uma super classe:
public abstract class BaseDataTypeViewModel<T> extends BaseObservable {
public final ObservableField<T> value = new ObservableField<>();
...
}
E é estendido em algum lugar como umBoolean
:
public class CheckBooleanDataTypeViewModel extends BaseDataTypeViewModel<Boolean> {
...
}
Eu vi noligação de dados - aviso safeUnbox que os avisos acontecem porque esta é umaBoolean
e não umboolean
, então tentei adicionar isso:android:checked="@={safeUnbox(viewModel.value)}"
ao invés deandroid:checked="@={viewModel.value}"
mas então eu recebi um erro dizendo que não posso inverter osafeUnbox()
método.
**** / erro de ligação de dados **** msg: a expressão android.databinding.DynamicUtil.safeUnbox (viewModelValue) não pode ser invertida: não há inverso para o método safeUnbox, você deve adicionar uma anotação @InverseMethod ao método para indicar qual método deve ser usado ao usá-lo em expressões de ligação bidirecional
Entendi corretamente os dois problemas separados, mas tenho que conviver com o aviso para evitar o erro ou é uma solução para evitar tanto o aviso quanto o erro? E o@InverseMethod
está falando? Não consegui adicionar esta anotação porque o método vem do pacote android.