Ich versuche, die Methode in meinem onClick (View v) XML aufzurufen, funktioniert aber nicht mit Fragment. Dies ist der Fehler.
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'
Java-Code:
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" />
Antworten:
Ihre Aktivität muss haben
nicht Fragment.
Wenn Sie das oben genannte nicht in Aktivität wollen. Initialisieren Sie die Schaltfläche im Fragment und setzen Sie den Listener auf den gleichen Wert.
Dann
quelle
Eine andere Möglichkeit besteht darin, dass Ihr Fragment View.OnClickListener implementiert und onClick (View v) in Ihrem Fragment überschreibt. Wenn Ihr Fragment mit der Aktivität sprechen soll, fügen Sie einfach eine Schnittstelle mit den gewünschten Methoden hinzu, und lassen Sie die Aktivität die Schnittstelle implementieren und ihre Methode (n) überschreiben.
http://developer.android.com/training/basics/firstapp/starting-activity.html http://developer.android.com/training/basics/fragments/communicating.html
quelle
Dies ist kein Problem, dies ist ein Design von Android. Siehe hier :
Eine mögliche Problemumgehung wäre, in Ihrer Hauptaktivität Folgendes zu tun:
und dann in Ihrer Fragmentklasse:
quelle
Die anderen haben bereits gesagt, dass Methoden in onClick in Aktivitäten und nicht in Fragmenten gesucht werden. Dennoch, wenn Sie es wirklich wollen, es ist möglich.
Grundsätzlich hat jede Ansicht ein Tag (wahrscheinlich null). Wir setzen das Tag der Stammansicht auf das Fragment, das diese Ansicht aufgeblasen hat. Anschließend können Sie ganz einfach die übergeordneten Elemente der Ansicht durchsuchen und das Fragment mit der angeklickten Schaltfläche abrufen. Jetzt ermitteln wir den Methodennamen und verwenden Reflection, um dieselbe Methode aus dem abgerufenen Fragment aufzurufen. Einfach!
in einer Klasse, die erweitert
Fragment
:Alle Aktivitäten werden von derselben ButtonHandlingActivity abgeleitet:
ButtonHandlingActivity.java:
Es müssen Methoden für alle xml onClick-Handler definiert werden.
com / example / customandroid / OnClickFragments.java:
Und das nächste Abenteuer wird die Verschleierung sein ...
PS
Es ist natürlich an Sie , Ihre Anwendung so zu gestalten, dass die Daten im leben Modell anstatt in Aktivitäten oder Fragmenten (die Controller aus dem MVC , Model-View-Controller - Sicht). Die Ansicht ist das, was Sie über XML definieren, sowie die benutzerdefinierten Ansichtsklassen (wenn Sie sie definieren, verwenden die meisten Benutzer nur das, was bereits vorhanden ist). Eine Faustregel: Wenn einige Daten die Bildschirmumdrehung definitiv überleben müssen, gehören sie zum Modell .
quelle
Du bist ok !!!!
quelle
Für Kotlin-Benutzer:
quelle