J'essaye d'appeler la méthode dans mon onClick (View v) XML, mais ne fonctionne pas avec Fragment. Telle est l'erreur.
01-17 12:38:36.840: E/AndroidRuntime(4171): java.lang.IllegalStateException:
Could not find a method insertIntoDb(View) in the activity class main.MainActivity
for onClick handler on view class android.widget.Button with id 'btn_conferma'
Code Java:
public void insertIntoDb(View v) {
...
}
XML:
<Button
android:id="@id/btn_conferma"
style="?android:attr/borderlessButtonStyle"
android:layout_width="0.0dip"
android:layout_height="45dp"
android:layout_marginLeft="2dp"
android:layout_weight="1.0"
android:background="@drawable/bottoni"
android:gravity="center_horizontal|center_vertical"
android:onClick="insertIntoDb"
android:text="SALVA"
android:textColor="#ffffff"
android:textSize="16sp" />
Réponses:
Votre activité doit avoir
pas Fragment.
Si vous ne voulez pas de l'activité ci-dessus. initialiser le bouton dans le fragment et définir l'auditeur sur le même.
ensuite
la source
Une autre option peut être que votre fragment implémente View.OnClickListener et remplace onClick (View v) dans votre fragment. Si vous avez besoin que votre fragment parle à l'activité, ajoutez simplement une interface avec la ou les méthodes souhaitées et demandez à l'activité d'implémenter l'interface et de remplacer sa ou ses méthodes.
http://developer.android.com/training/basics/firstapp/starting-activity.html http://developer.android.com/training/basics/fragments/communicating.html
la source
Ce n'est pas un problème, c'est une conception d'Android. Voir ici :
Une solution de contournement possible serait de faire quelque chose comme ceci dans votre MainActivity:
puis dans votre classe Fragment:
la source
Les autres ont déjà dit que les méthodes dans onClick sont recherchées dans les activités, pas dans les fragments. Néanmoins, si vous le voulez vraiment, il est possible.
Fondamentalement, chaque vue a une balise (probablement nulle). Nous définissons la balise de la vue racine sur le fragment qui a gonflé cette vue. Ensuite, il est facile de rechercher les parents de vue et de récupérer le fragment contenant le bouton cliqué. Maintenant, nous trouvons le nom de la méthode et utilisons la réflexion pour appeler la même méthode à partir du fragment récupéré. Facile!
dans une classe qui s'étend
Fragment
:toutes les activités sont dérivées de la même ButtonHandlingActivity:
ButtonHandlingActivity.java:
Il doit définir des méthodes pour tous les gestionnaires onClick xml.
com / exemple / customandroid / OnClickFragments.java:
Et la prochaine aventure sera l'obscurcissement progressif ...
PS
C'est bien sûr à vous de concevoir votre application pour que les données vivent dans le modèle plutôt que dans des activités ou des fragments (qui sont des contrôleurs du point de vue MVC , modèle-vue-contrôleur ). La vue est ce que vous définissez via xml, plus les classes de vue personnalisées (si vous les définissez, la plupart des gens réutilisent simplement ce qui est déjà). Une règle de base: si certaines données doivent définitivement survivre au tour de l'écran, elles appartiennent à Model .
la source
Ça va !!!!
la source
Pour les utilisateurs de Kotlin:
la source