Android de Liaison de Données : impossible de trouver le setter pour l'attribut

Ne sais pas comment cela fonctionne, mais selon ce post il est possible de lier spécifiques écouteur à l'aide des espaces de noms différents.

Je voulais faire la même chose avec un searchview et la lier à un QueryTextListener, mais j'obtiens l'erreur suivante :

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

Ce que j'ai fait dans mon 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 ...

Et le xml :

Mon espace de noms est déclaré dans la mise en page de la balise comme ceci :

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

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

C'est ma balise de données :

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

Merci beaucoup pour tout indice !

L'erreur suggèrent que vous êtes absent de l'ouvreur de la OnQueryTextListener - avez-vous un? Vous avez besoin de setter & getter pour la liaison de données.
Le SearchView classe n'a pas de getter pour le QueryTextListener mais comme il est décrit dans le post, il semble possible de faire la même chose mais avec un EditText et l'EditText classe n'a pas de getter pour le TextWatcher ni.
I"m ne parle pas d'une lecture, mais sur un setter. Donc je pense qu'il vous manque une méthode setQueryTextListener(QueryTextListener mQueryTextListener){...}
Désolé, l'incompréhension. Le setter peut être trouvé dans la doc de la SearchView de la classe : ici
Un autre essai serait d'ajouter @BindingAdapter(bind:setOnQueryTextListener) au-dessus de votre méthode, puisque c'est une méthode personnalisée, documentation je suis désolé, je ne pourrais pas vous aider davantage.

OriginalL'auteur MHogge | 2015-12-01