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
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
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
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
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, la réponse était juste un mauvais nom de package.
Mon SearchView a été déclarée dans le code xml suivant nom du package :
Et le paquet que j'ai utilisé dans le ViewModel est
OriginalL'auteur MHogge