2017-07-10 3 views
1

Hier ist es meine BindingAdapterAndroid 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(); 
    } 
} 

I RecyclerView Abhängigkeit von meinem gradle hinzugefügt haben:

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

Hier ist, wie ich in meinem Layout verwenden:

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

Ich habe die Bindungsvariablen viewModel bereits nach dem Aufblasen dieses Layouts gesetzt. Aber immer, wenn ich meine Codes laufen, gradle zeigt immer die folgenden Fehler

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

ich dieses Problem lösen kann, indem jeden app:lastAdapter von meinen Layouts dann sauber zu entfernen und neu zu erstellen, neu zu schreiben diese app:lastAdapter attibutes dann wieder Projekt neu, funktioniert alles einwandfrei.

Das ist keine bequeme Lösung.

+0

Wie sieht Ihre variable Linie aus? Und was ist der 'Adapter' in Ihrem ViewModel? –

+0

Hi George, 'adapter' ist ein Objekt aus der LastAdapter Klasse hier ist es ' var adapter = LastAdapter (Daten, BR.item) .map (R.layout.menu_item) ' –

+0

Ihr BindingAdapter dauert a 'LastAdapter', aber der Adapter scheint ein anderer Typ zu sein. Lies ich das richtig? –

Antwort

0

Als George an dem Kommentar sagte oben „BindingAdapter eine LastAdapter nimmt, aber Adapter erscheint eine andere Art zu sein“ und das ist, wie die Variable asigned:

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

Es scheint, Databinding-Bibliothek‘ t implizite Datentyp Deklaration von Kotlin zu bestimmen, so muss es explizit definiert werden:

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