J'ai une application Android et dans le fichier de mise en page XML, j'ai quelque chose comme ceci: puis dans le code Java, j'ai implémenté p> Puis-je utiliser une approche similaire pour la mise au point d'actions changeantes. Avoir dans le XML quelque chose comme p> et ensuite dans le code Java: p> ou il n'y a aucun moyen de faire un moyen de faire oncocuschange dans le XML? p> p>
5 Réponses :
Il n'y a pas de propriété dans XML comme Onfocuschanged.Vous devez gérer le changement de mise au point dans le code Java lui-même. P>
Traditionnellement, il n'est pas utilisé dans la déclaration XML, vous pouvez ajouter le Android: Capable code> Attribut XML à la vue, dans votre déclaration de présentation terminée, définissez-la true. Ensuite, vous devez gérer le changement de mise au point de votre code Java. P>
Il n'y a pas de Android code> Equivalent d'espace de noms XML pour un
Onfocuschangelistener CODE> Comme vous le décrivez, mais théoriquement, vous pouvez implémenter quelque chose de similaire à l'aide de la réflexion et de la bibliothèque de liaison de données Android, bien que je voudrais Évitez probablement cela - il est beaucoup plus propre de gérer simplement le changement de mise au point de Java. P>
Nous ne pouvons pas définir la mise à l'écoute de Changement de mise au point sur editext dans XML Fichier comme OnClick Stratégreer. Nous devons le faire dans le fichier Java uniquement.
edit_Text.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){ Toast.makeText(getApplicationContext(), "got the focus", Toast.LENGTH_LONG).show(); }else { Toast.makeText(getApplicationContext(), "lost the focus", Toast.LENGTH_LONG).show(); } } });
Si vous utilisez la liaison des données Android pour lier vos gestionnaires, vous pouvez écrire une liaison personnalisée n'importe où dans votre code pour réussir votre gestionnaire de XML à Java:
<layout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="handler" type="Handler" /> </data> <EditText app:onFocusChange="@{handler.OnFocusChangeListener}"/> </layout>
Cela fonctionne sûrement! Chaque fois que la mise au point est modifiée system.out.print ("s"); code> est excusé depuis que nous avons joint la mise au point de la mise au point auditeur
Y compris l'application : code> préfixe dans la déclaration code> @BindingAdapter code> générera un avertissement de compilateur. Les adaptateurs de liaison s'attendent à ce que leurs attributs liés soient dans le
http://schemas.android.com/apk/res-auto code> Espace de noms, alors même si
app: code> est le préfixe habituellement Lié à cet espace de noms, il est trompeur de l'inclure car cela implique que vous ayez le choix d'utiliser un espace de noms différent. Annotation de la méthode avec
@BindingAdapter ("Onfocuschange") code>. Dans le XML, bien sûr, vous avez toujours besoin du préfixe code> sur le nom de l'attribut comme d'habitude.