Tratando de llamar a un método en mi actividad desde un fragmento. Quiero que el fragmento proporcione los datos del método y obtenga los datos cuando regrese el método. Quiero lograr una llamada similar a un método estático, pero sin el uso de estática porque crea problemas en la actividad.
¡Nuevo en fragmentos así que necesito una explicación fácil y pedagógica!
¡Gracias!
android
android-fragments
Joakim Ericsson
fuente
fuente
Probablemente debería intentar desacoplar el fragmento de la actividad en caso de que quiera usarlo en otro lugar. Puede hacer esto creando una interfaz que implemente su actividad.
Entonces definiría una interfaz como la siguiente:
Supongamos, por ejemplo, que desea asignar a la actividad una Cadena y hacer que devuelva un Entero:
Esto se puede definir en el fragmento o en un archivo separado.
Entonces, su actividad implementaría la interfaz.
Luego, en su fragmento, tendría una variable MyStringListener y establecería el oyente en el método fragmentado onAttach (Actividad de actividad).
editar (17.12.2015):
onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
La primera respuesta definitivamente funciona, pero combina su fragmento actual con la actividad del host. Es una buena práctica mantener el fragmento desacoplado de la actividad del host en caso de que desee utilizarlo en otra actividad.
fuente
Para desarrolladores de Kotlin
Para desarrolladores de Java
fuente
Actualización después de que entiendo más cómo funcionan los fragmentos. Cada fragmento pertenece a una actividad principal. Así que solo usa:
Desde dentro del fragmento. Es una mejor respuesta porque evita los moldes superfluos. Si no puede evitar los moldes con esta solución, use el siguiente.
============
lo que tienes que hacer es lanzar a la actividad exterior
crear una nueva instancia confundirá el marco de Android y no podrá reconocerlo. ver también :
https://stackoverflow.com/a/12014834/1984636
https://stackoverflow.com/a/2042829/1984636
fuente
Aunque me gusta completamente la respuesta de Marco, creo que es justo señalar que también puede usar un marco basado en publicación / suscripción para lograr el mismo resultado, por ejemplo, si va con el bus de eventos, puede hacer lo siguiente
fragmento :
Actividad:
fuente
En kotlin puede llamar al método de actividad desde un fragmento como el siguiente:
fuente
Para acceder a una función declarada en su Actividad a través de su fragmento, utilice una interfaz, como se muestra en la respuesta de marco.
Para acceder a una función declarada en su Fragmento a través de su actividad, puede usar esto si no tiene una etiqueta o una identificación
Esta es la ViewpagerAdapterClass
Esta respuesta es para novatos como yo. Tenga un buen día.
fuente
Esta es de la clase Fragmento ...
Este código de la clase de actividad ...
fuente
He intentado con todos los métodos que se muestran en este hilo y ninguno funcionó para mí, prueba este. Funcionó para mi.
fuente
He estado buscando la mejor manera de hacerlo, ya que no todos los métodos a los que queremos llamar se encuentran en Fragmento con la misma Actividad principal.
En tu fragmento
En su actividad
fuente
((YourActivityName)getActivity()).functionName();
Ejemplo:
((SessionActivity)getActivity()).changeFragment();
Nota: el nombre de la clase debe estar en público
fuente
¿Dónde
your_activity
está el nombre de su actividad ymethod_name()
el nombre del método al que desea llamar?fuente
Para Kotlin pruébalo
fuente