2015-12-01 15 views
6

Non so come funziona ma in base allo this post è possibile associare un listener specifico utilizzando diversi spazi dei nomi.Associazione dati Android: impossibile trovare il setter per l'attributo

ho voluto fare la stessa cosa con un SearchView e associare un QueryTextListener ad esso, ma ottengo il seguente errore:

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

Quello che ho fatto nel mio 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 ... 

E il xml:

mio spazio dei nomi è dichiarato nel tag di layout in questo modo:

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

E il mio 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> 

Questa è la mia variabile di dati:

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

Molte grazie per tutto l'indizio!

+2

L'errore suggeriscono che vi manca il setter per 'OnQueryTextListener '- ne hai uno? Avete bisogno di entrambi setter e getter per l'associazione dei dati. – yennsarah

+0

La classe SearchView non ha getter per QueryTextListener ma come descritto nel post correlato, sembra possibile fare la stessa cosa ma con un EditText e la classe EditText non ha getter per TextWatcher. – MHogge

+0

Non parlo di un getter, ma di un setter. Quindi penso che manchi un metodo 'setQueryTextListener (QueryTextListener mQueryTextListener) {...}' – yennsarah

risposta

1

Nel mio caso la risposta era solo un nome di pacchetto errato.

mio SearchView è stato dichiarato in XML con il seguente nome del pacchetto:

android.support.v7.widget.SearchView 

e il pacchetto che ho usato nel ViewModel è stato

android.widget.SearchView 
Problemi correlati