2017-10-21 42 views
0

J'ai essayé de faire la même chose comme ici: https://gist.github.com/susemi99/a45ca534cc109271f34e6c992f69f048Comment correctement addTextChangeListener dans Android xml

donc j'avoir mon EditText en xml:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

<data> 
    <import type="test.edu.MyViewModel"/> 
    <variable type="MyViewModel" name="viewModel"/> 
</data> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

(...) 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:addTextChangeListener="@{viewModel.myTextWatcher}"/> 

(...) 

Et je TextWatcher dans MyViewModel:

public class MyViewModel extends BaseObservable { 
    public TextWatcher myTextWatcher = new TextWatcher(){ 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) {} 

     @Override 
     public void afterTextChanged(Editable editable) {} 
    }; 
} 

Je pense que je l'ai fait la même chose que dans le lien mentionné, mais lorsque je tente de compiler je reçois:

Impossible de trouver le sélecteur pour l'attribut 'app: addTextChangeListener' avec le type de paramètre android.text.TextWatcher sur android.widget.EditText.

Pourriez-vous me donner quelques indices sur ce qui ne va pas ici? J'ai supposé que le code dont j'ai parlé compile mais je ne suis pas sûr à 100%.

Répondre

0

J'ai finalement compris cela ... Il était juste une faute de frappe. Au lieu de addText Changé Listener que j'avais addText Modifier Listener et pour être honnête, le message d'erreur n'était pas très utile. Maintenant, quand je connais la solution, c'est évident, mais auparavant, je vérifiais l'espace de noms "app", quelques annotations @Bind, des options de dégradé et des choses comme ça. Peut-être qu'il est seulement moi, mais je pense que ce serait beaucoup plus facile avec l'erreur comme:

android.widget.EditText n'a pas la fonction addTextChangeListener

0

Vous pouvez essayer de cette manière:

EditText editText =(EditText)findViewById(R.id.editText1); 
    editText.addTextChangeListener(new TextWatcher(){ 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) {} 

     @Override 
     public void afterTextChanged(Editable editable) {} 
    }; 

au lieu de l'écrire dans votre fichier xml

+0

Je sais, mais depuis que je suis en utilisant MVVM je voulais pour éviter findViewById dans ViewModel. Selon Google: "La seule responsabilité de ViewModel est de gérer les données de l'interface utilisateur. Il ne devrait jamais accéder à la hiérarchie de vos vues (...)" – LLL