0

J'utilise la bibliothèque de liaison de données et je l'ai eu ainsi pour, mais il y a des questions que je cant't semblent get.For commencerLiaison de données ne fonctionne pas Android

Ceci est une partie de ma mise en page xml activity_login. xml

<data> 

    <variable 
     name="viewModel" 
     type="com.ViewModel.LoginViewModel" /> 

</data> 
<EditText 
       android:id="@+id/edit_text_username_register" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/username" 
       android:imeOptions="actionNext" 
       android:inputType="text" 
       android:textSize="15sp" 
       android:theme="@style/EditTextTheme" 
       app:addTextChangedListener="@{viewModel.getUsername}" /> 

et mon ViewModel contient

public TextWatcher getUsername() { 
    return 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) { 
      Log.i("username", s.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }; 
} 

le code ci-dessus est de chercher le nom d'utilisateur que l'utilisateur types.Is que la bonne façon d'utiliser la liaison de données ou que je fais mal? ci-dessus le code fonctionne parfaitement. Le problème est quand j'essaie de le faire de la façon dont je l'ai trouvé en ligne qui est en ajoutant

android:addTextChangedListener="@{viewModel.getUsername}" 

il ne fonctionne pas et je reçois un avertissement disant attribut inconnu et si je tente le compiler i obtenir une liaison de données ne n'existe pas d'erreur.Je suis aussi en utilisant un radiogroup contenant 2 boutons radio et je voudrais chercher lequel a été sélectionné en utilisant la liaison de données.J'ai trouvé des sources en ligne qui utilisent android: onCheckedChanged que j'ai essayé d'utiliser mais je reçois une erreur existence et attribut inconnu

+0

Postez votre erreur aussi bien. Surtout la partie où il est dit * attribut inconnu *. Peut-être utilise-t-il 'viewModel.username' à la place. – tynn

Répondre

0

InverseBindingMethod est un bon truc ici, suivez un exemple.

classe

public class Handlers { 
    public void onKeywordChanged(CharSequence s, int start, int before, int count) { 
      // Your code here 
    } 
} 

mise en page

<layout> 
    <data> 
     <variable name="handlers" 
      type="my.package.Handlers" /> 
    </data> 

    ... 
    <EditText 
     ... 
     android:onTextChanged="@{handlers::onKeywordChanged}" 
    /> 
</layout> 

Pour plus d'informations https://developer.android.com/reference/android/databinding/InverseBindingMethod.html