2015-12-01 12 views
6

Nie wiesz, jak to działa, ale zgodnie z this post możliwe jest powiązanie określonego detektora przy użyciu różnych przestrzeni nazw.Wiązanie danych Androida: nie można znaleźć narzędzia ustawiającego dla atrybutu

chciałem zrobić to samo z searchview i powiązać QueryTextListener do niego, ale pojawia się następujący błąd:

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

Co zrobiłem w moim ViewModel:

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 ... 

a xml:

Moja przestrzeń nazw jest zadeklarowana w znaczniku układu tak:

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

A moja SearchView:

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

To jest mój tag dane:

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

Dziękujemy za jakikolwiek trop!

+2

Błąd sugerują, że brakuje setter dla 'OnQueryTextListener '- czy masz? Do tworzenia kopii danych potrzebny jest program ustawiający i pobierający. – yennsarah

+0

Klasa SearchView nie ma żadnego gettera dla QueryTextListener, ale jak opisano w powiązanym poście, wydaje się, że można zrobić to samo, ale z EditText i EditText klasa nie ma żadnego gettera dla TextWatchera ani. – MHogge

+0

Nie mówię o gette, ale o setera. Więc myślę, że brakuje ci metody 'setQueryTextListener (QueryTextListener mQueryTextListener) {...}' – yennsarah

Odpowiedz

1

W moim przypadku odpowiedź była po prostu błędną nazwą paczki.

Moja SearchView został ogłoszony w xml z następującą nazwą pakiet:

android.support.v7.widget.SearchView 

i pakiet użyłem w ViewModel został

android.widget.SearchView 
Powiązane problemy