2017-07-10 17 views
1

ここでは、私が私のGradleにRecyclerView依存性を追加している私のBindingAdapterアンドロイドBindingAdapter error.NonExistentClass

@InverseBindingMethods({ 
     @InverseBindingMethod(type = RecyclerView.class, attribute = "lastAdapter", method = "getLastAdapter"), 
}) 
public class RecyclerViewBindingAdapter { 
    @BindingAdapter(value = {"lastAdapter"}, requireAll = false) 
    public static void setLastAdapter(RecyclerView view, LastAdapter adapter) { 
     view.setAdapter(adapter); 
    } 

    @InverseBindingAdapter(attribute = "lastAdapter") 
    public static LastAdapter getLastAdapter(RecyclerView view) { 
     return (LastAdapter) view.getAdapter(); 
    } 
} 

です:

compile "com.android.support:recyclerview-v7:25.3.1" 

ここでは、私は私のレイアウトで使用する方法である:

<android.support.v7.widget.RecyclerView 
app:lastAdapter = "@{viewModel.adapter}" 
... /> 

このレイアウトを拡張した後、私はすでにviewModelバインディング変数を設定しています。しかし、私は私のコードを実行するたびに、Gradleのは、常に次のエラーに

Error:(48, 34) Cannot find the setter for attribute 'app:lastAdapter' with parameter type error.NonExistentClass on android.support.v7.widget.RecyclerView. 

を示し、私はその後、クリーンな私のレイアウトから任意のapp:lastAdapterを削除することによってこの問題を解決し、再構築し、それらのapp:lastAdapter attibutesは再びプロジェクトを再構築書き換えることができ、すべてが正常に動作します。

これは便利な解決策ではありません。

+0

可変ラインはどのように見えますか? ViewModelの 'adapter'は何ですか? –

+0

こんにちはGeorge、 'adapter'はLastAdapterクラスのオブジェクトです ここでは です。varアダプタ= LastAdapter(データ、BR.item).map (R.layout.menu_item) –

+0

BindingAdapterは、 'LastAdapter'でも、アダプターは異なるタイプのように見えます。私はそれを正しく読んでいますか? –

答えて

0

ジョージは「BindingAdapterがLastAdapterがかかりますが、アダプタは別のタイプのように見える」 と、これはどのように変数がasignedある上記のコメントで言ったように:「それはデータバインディングライブラリはできるようだ

var adapter = LastAdapter(data, BR.item).map<MenuLinked, MenuItemBinding>(R.layout.menu_item) 

明示的に定義する必要があるので、明示的に定義する必要があります。

var adapter : LastAdapter = LastAdapter(data, BR.item).map<MenuLinked, MenuItemBinding>(R.layout.menu_item)