L'utilisation de l'attribut onClick dans la mise en page xml provoque une exception NoSuchMethodException dans les boîtes de dialogue Android
J'ai créé un dialogue personnalisé et une mise en page xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tap Me"
android:onClick="dialogClicked" />
</LinearLayout>
Dans la classe de boîte de dialogue, j'ai implémenté la méthode "dialogClicked(View v)":
public class TestDialog extends Dialog {
public TestDialog(final Context context)
{
super(context);
}
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
}
public void dialogClicked(final View view)
{
System.out.println("clicked");
}
}
Quand j'appuie sur le bouton je reçois un NoSuchMethodException 'dialogClicked'. Réglage de la onClick gestionnaire de mise en page xml fonctionne très bien pour des activités, mais pas dans les dialogues. Des idées? Ce que je fais mal?
source d'informationauteur Impression
Vous devez vous connecter pour publier un commentaire.
Définir la méthode (dialogClicked) en Activité.
Et modifier TestDialog comme le code suivant:
Je pense que ça fonctionne 🙂
Je pense que la question est celle de la portée. Je ne suis pas sûr de savoir comment feriez-vous face à cette en xml, mais essentiellement le dialogueClicked méthode de la mise en page xml ne sais pas où trouver la méthode que vous avez définies dans la classe de boîte de dialogue.
L'approche standard que j'ai vu de se lier les boutons de mises en page personnalisé est comme suit.
.
}
Espère que ça aide. Serait toujours intéressé de savoir si il y avait une solution à l'aide de xml onClick de se lier à la méthode. Peut-être un argument supplémentaire dans le setContentView? quelque chose de r l'autre.
J'ai trouvé le code suivant dans la View.java source:
-> Le point de vue utilise son contexte afin de résoudre le onclick méthode de gestionnaire d'.
Noew le code suivant à partir d'Dialog.java source:
Dans le constructeur de la boîte de dialogue d'une instance de ContextThemeWrapper obtient créé et mis en contexte. Cette instance est ni la boîte de dialogue personnaliser la classe, ni la vocation de l'activité, qui peuvent être le lieu de la mise en œuvre de la méthode de gestionnaire. Par conséquent, les vues ne sont pas en mesure de trouver le onclick méthode de gestionnaire d'.
Mais je dois utiliser le onclick XML attribut. Toutes les solutions disponibles?
Dialogues besoin de la signature
android:onClick="method"
est plutôt cool, mais il ne fonctionne pas sur Android 1.5, donc j'évite depuis un certain temps.Une simple solution de contournement:
Faire de votre
Dialog
unActivity
et l'utilisationandroid:theme="@android:style/Theme.Dialog"
en vousAndroidManifest
.La suite de Jett Hsieh post, j'ai mis en œuvre mes dialogues un peu différemment à l'aide de showDialog et dismissDialog, mais les principes fondamentaux de l'obtention de l'android:onClick de travail ont été les mêmes, mon exemple de code ci-dessous pour référence future.
Et la mise en page du fichier:
Essayer de définir cette méthode (dialogClicked) dans l'activité et non dans la boîte de dialogue.
Il pourrait utiliser la réflexion, donc si vous utilisez de différentes activités, il suffit d'écrire la méthode dans chaque activité qui pourrait montrer que le dialogue
Une boîte de dialogue est toujours créé et affiché dans le cadre d'une Activité. Selon Android Références:
Aussi, vous êtes de passage de l'objet renvoyé par getcontexteapplication(); dans le constructeur de TestDialog?
système recherche la méthode de la mise en page a été gonflée de, ou de l'activité de la classe à laquelle le xml a été défini comme le contenu.