2017-11-16 16 views
0

を反転することはできません。safeUnbox()私は私のAndroidアプリケーションのすべての警告を排除しようとしているそのうちの一つがこれです

viewModel.valueは箱入りの分野であるだけに非ボックス化する必要がありますandroid:checkedを実行します。これにより、NPEがデータバインディングによって安全にアンボックスされるようになります。あなたは式を変更して、明示的に警告を防ぐためにsafeUnbox()でviewModel.valueをラップすることができます値は、スーパークラスから来ている一般的なObservableFieldある

public abstract class BaseDataTypeViewModel<T> extends BaseObservable { 
    public final ObservableField<T> value = new ObservableField<>(); 
    ... 
} 

そして、どこかのようにextentedされますBoolean

public class CheckBooleanDataTypeViewModel extends BaseDataTypeViewModel<Boolean> { 
    ... 
} 

私は、これはBooleanないであるため、警告が起こることdata binding - safeUnbox warningで見ましただから私はこれを追加しようとした:android:checked="@={viewModel.value}"の代わりにandroid:checked="@={safeUnbox(viewModel.value)}"しかし、私はsafeUnbox()メソッドを反転することはできないと言っているエラーを持っています。

**** /エラーデータバインディングが**** MSG:式android.databinding.DynamicUtil.safeUnbox(viewModelValue)が反転することはできません:メソッドsafeUnboxのための逆はありません、あなたは@InverseMethodを追加する必要がありますそれを使用する際に使用されるべき方法を示すためのメソッドに注釈バインディング式

双方向で、私は2つの分離の問題を正しく理解し、私はエラーを回避するために、警告と一緒に暮らすために持っているか、彼らのですか警告とエラーの両方を回避するソリューション?それについては、@InverseMethodについてはどうですか?メソッドがアンドロイドパッケージから来ているので、私はこの注釈を追加することはできませんでした。

答えて

3

私はAndroid Architecture Componentsまたはこの特定の方法でデータバインディングライブラリで作業していませんが、私はまだ助けることができると思います。

あなたのXMLの中で、あなたがこの持っている:それはあなたがviewModel.valuenullである場合には、(何か特別なことをするつもりだということを知りたいので、システムはあなたに警告を与えている

android:checked="@={viewModel.value}" 

を代わりにfalseのように振る舞います)。これはsafeUnbox()メソッドで行います。

警告を解決するには、safeUnbox()コールを明示的にすることをお勧めします。 safeUnbox()の逆数がないので、に戻るからbooleanからBooleanに戻ることはできません。

しかし、safeUnbox()を使用する必要はありません。 Booleanbooleanに変換する独自のメソッドを作成し、推奨される注釈を使用してbooleanからBooleanに変換するメソッドを宣言することができます。私はこれが役に立てば幸い

android:checked="@={com.example.stackoverflow.MyConversions.myUnbox(viewModel.value)}" 

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; 
    } 
} 

今、あなたはあなたにXMLを変更することができます。私がオフベースだと分かったら、私に知らせてください。私はこのトピックについてもっと学びたいと思う。

私はこの答えに、私はあなたが問題をよく理解でしたhttps://medium.com/google-developers/android-data-binding-inverse-functions-95aab4b11873

+0

から学んだことのほとんど!それを解決する良い方法。私は "com.example ..."を ''タグにインポートしました。 – MHogge

関連する問題

 関連する問題