Mit onClick-Attribut im layout-xml-bewirkt eine NoSuchMethodException in Android-Dialoge
Habe ich einen custom-dialog und eine layout-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>
In der dialog-Klasse habe ich die Methode implementiert "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");
}
}
Wenn ich Tippen Sie auf die Schaltfläche bekomme ich eine NoSuchMethodException 'dialogClicked'. Einstellung der onClick-handler im layout-xml eignet sich gut für Aktivitäten, nicht aber in Dialogen. Irgendwelche Ideen? Was mache ich falsch?
InformationsquelleAutor der Frage Impression | 2010-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definieren Sie die Methode (dialogClicked) in der Aktivität.
Und ändern TestDialog wie der folgende code:
Ich denke, es funktioniert 🙂
InformationsquelleAutor der Antwort Jett Hsieh
Ich denke das Thema gehört in den Anwendungsbereich. Ich bin mir nicht sicher, wie würden Sie diese Adresse in xml, aber im wesentlichen dialogueClicked Methode in der layout-xml nicht wissen, wo zu finden die Methode, die Sie definiert haben, in der dialog-Klasse.
Den standard-Ansatz, den ich gesehen habe, zu binden, Knöpfe in benutzerdefinierten layouts ist wie folgt.
.
}
Hoffe, das hilft. Wäre immer noch daran interessiert zu wissen, ob es eine Lösung gibt, um mittels xml-onClick-Bindung an die Methode. Vielleicht ein zusätzliches argument in der setContentView? etwas r ' other.
InformationsquelleAutor der Antwort Emile
Habe ich Folgendes gefunden code in der View.java Quelle:
-> Die Ansichten verwendet, Ihren Kontext zu lösen, das onclick-handler-Methode.
Noew den folgenden code aus Dialog.java Quelle:
Im Konstruktor des dialog eine Instanz von ContextThemeWrapper wird erstellt und als Kontext. Dies Beispiel ist weder das benutzerdefinierte Dialogfeld Klasse, noch der Aufruf-Aktivität, was kann der Ort für die Implementierung der handler-Methode. Daher Ansichten sind nicht in der Lage zu finden, das onclick-handler-Methode.
Aber muss ich das onclick-XML-attribut. Problemumgehungen verfügbar?
InformationsquelleAutor der Antwort Impression
Dialoge benötigen die Unterschrift
InformationsquelleAutor der Antwort David Hedlund
android:onClick="method"
ist ziemlich cool, aber es funktioniert nicht auf Android 1.5 ich bin also zu vermeiden, für einige Zeit.Eine einfache Problemumgehung:
Machen Sie Ihre
Dialog
eineActivity
und verwendenandroid:theme="@android:style/Theme.Dialog"
in SieAndroidManifest
.InformationsquelleAutor der Antwort Macarse
Folgenden Jett Hsieh s post habe ich umgesetzt, meine Dialoge etwas anders mit showDialog und dismissDialog, aber die Grundlagen immer die android:onClick arbeiten waren die gleichen, mein Beispiel code ist unter Referenz für die Zukunft auf.
Und die layout-Datei:
InformationsquelleAutor der Antwort Kennifer
Versuchen zu definieren, dass die Methode (dialogClicked) in der Aktivität und nicht in den dialog.
Es verwenden könnte, Reflexion, so dass, wenn Sie unterschiedliche Aktivitäten nur schreiben, dass die Methode in jede Aktivität, die möglicherweise zeigen, dass dialog
InformationsquelleAutor der Antwort Pedro Loureiro
Sich ein dialog, der immer erstellt und angezeigt werden, als Teil der Aktivität. Laut Android Referenzen:
Außerdem sind Sie übergeben das Objekt zurückgegeben getApplicationContext(); der Konstruktor von TestDialog?
InformationsquelleAutor der Antwort Raunak
system sieht für die Methode in der, wo das layout wurde aufgeblasen aus, oder in der activity-Klasse, die das xml-gesetzt wurde als Inhalt.
InformationsquelleAutor der Antwort noob