Estoy tratando de invocar el método en mi onClick (Ver v) XML, pero no funciona con Fragment. Este es el error.
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'
Código 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" />
Respuestas:
Tu actividad debe tener
no Fragmento.
Si no quiere lo anterior en actividad. Inicializar el botón en el fragmento y configurar el oyente al mismo.
Luego
fuente
Otra opción puede ser que su fragmento implemente View.OnClickListener y anule onClick (Ver v) dentro de su fragmento. Si necesita que su fragmento hable con la actividad, simplemente agregue una interfaz con los métodos deseados y haga que la actividad implemente la interfaz y anule su (s) método (s).
http://developer.android.com/training/basics/firstapp/starting-activity.html http://developer.android.com/training/basics/fragments/communicating.html
fuente
Esto no es un problema, es un diseño de Android. Ver aquí :
Una posible solución alternativa sería hacer algo como esto en su MainActivity:
y luego en tu clase Fragmento:
fuente
Los otros ya han dicho que los métodos en onClick se buscan en actividades, no en fragmentos. Sin embargo, si realmente lo desea, es posible.
Básicamente, cada vista tiene una etiqueta (probablemente nula). Establecemos la etiqueta de la vista raíz en el fragmento que infló esa vista. Entonces, es fácil buscar los padres de la vista y recuperar el fragmento que contiene el botón en el que se hizo clic. Ahora, averiguamos el nombre del método y usamos la reflexión para llamar al mismo método desde el fragmento recuperado. ¡Fácil!
en una clase que se extiende
Fragment
:todas las actividades se derivan de la misma ButtonHandlingActivity:
ButtonHandlingActivity.java:
Tiene que definir métodos para todos los manejadores xml onClick.
com / example / customandroid / OnClickFragments.java:
Y la próxima aventura será una ofuscación proguard ...
PD
Por supuesto, depende de usted diseñar su aplicación para que los datos vivan en el Modelo en lugar de en Actividades o Fragmentos (que son Controladores desde el punto de vista MVC , Modelo-Vista-Controlador ). La Vista es lo que define a través de xml, más las clases de vista personalizadas (si las define, la mayoría de las personas simplemente reutilizan lo que ya es). Una regla general: si algunos datos definitivamente deben sobrevivir al cambio de pantalla, pertenecen a Model .
fuente
Estas bien !!!!
fuente
Para usuarios de Kotlin:
fuente