2015-12-01 6 views
6

Nicht sicher, wie es funktioniert, aber nach this post ist es möglich, bestimmte Listener mit verschiedenen Namespaces zu binden.Android Data Binding: kann den Setter für Attribut nicht finden

Ich wollte das Gleiche mit einem Search und binden, um eine QueryTextListener zu, es zu tun, aber ich erhalte den folgenden Fehler:

Cannot find the setter for attribute 'bind:setOnQueryTextListener' 
with parameter type android.widget.SearchView.OnQueryTextListener. 

Was ich in meinem Viewmodel hat:

public class MembersFragmentViewModel extends BaseObservable { 

    private Context context; 
    private MembersAdapter adapter; 
    private RecyclerView recyclerView; 

    public MembersFragmentViewModel(Context context, MembersAdapter adapter, RecyclerView recyclerView) { 
     this.context = context; 
     this.adapter = adapter; 
     this.recyclerView = recyclerView; 
    } 

    public SearchView.OnQueryTextListener getQueryTextListener(){ 
     return new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String query) { 
       List<Contact> filteredModelList = filter(adapter.getContacts(), query); 
       adapter.animateTo(filteredModelList); 
       if(recyclerView != null) 
        recyclerView.scrollToPosition(0); 
       return true; 
      } 
     }; 
    } 
    //Code ... 

Und die xml:

Mein Namensraum wird in dem Layout-Tag wie folgt erklärt:

xmlns:bind="http://schemas.android.com/apk/res-auto" 

Und meine Suche:

<android.support.v7.widget.SearchView android:id="@+id/searchview" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 

     android:background="@drawable/rounded_search_view_background" 
     bind:setOnQueryTextListener="@{viewModel.QueryTextListener}"> 

</android.support.v7.widget.SearchView> 

Dies ist meine Daten tag:

<data> 
    <variable 
     name="viewModel" 
     type="mypackagename.viewmodel.members.MembersFragmentViewModel"/> 
</data> 

Vielen Dank für jeden Hinweis!

+2

Der Fehler deutet darauf hin, dass Sie die Setter für 'OnQueryTextListener fehlen '- Hast du einen? Sie benötigen sowohl Setter als auch Getter für die Datenbindung. – yennsarah

+0

Die SearchView-Klasse hat keinen Getter für den QueryTextListener, aber wie im zugehörigen Post beschrieben, scheint es möglich, dasselbe mit einem EditText zu tun, und die EditText-Klasse hat auch keinen Getter für den TextWatcher. – MHogge

+0

Ich spreche nicht von einem Getter, sondern von einem Setter. Also ich denke, Sie fehlen eine Methode 'setQueryTextListener (QueryTextListener mQueryTextListener) {...}' – yennsarah

Antwort

1

In meinem Fall war die Antwort nur ein falscher Paketname.

Meine Suche wurde in xml mit den folgenden Paketnamen erklärt:

android.support.v7.widget.SearchView 

und das Paket, das ich in dem Ansichtsmodell verwendet wurde

android.widget.SearchView 
Verwandte Themen