2011-12-20 8 views
8

He leído bastantes artículos sobre fragmentos, pero todavía estoy confundido acerca de cómo hacer qué.Fragmentos en el método ClickClick en el elemento de fragmento

Tengo una actividad principal, que muestra dos fragmentos uno al lado del otro. En uno de los fragmentos tengo un botón y se define en el código XML fragmentos de diseño para el botón

android:onClick="buttonClicked" 

Ahora quiero poner en práctica ese método

public void buttonClicked(View view) 

habría dado por hecho que esto tiene que ser implementado en FragmentA.java y no en MainActivity.java. Pero solo funciona si ese método se implementa en MainActivity.java. ¿Porqué es eso? Para mí eso no tiene sentido. Pre Honeycomb, un método perteneciente a una actividad se mantuvo en esa actividad, ahora en una tableta, estoy fusionando muchas actividades en una MainActivity y todos los diferentes métodos se fusionaron. ¿Qué pones, por ejemplo, en FragmentA.java? ¿Qué sucede si tiene que iniciar una actividad propia porque esta aplicación se ejecuta en una computadora de mano, entonces el método onClick no debe estar en la actividad principal sino en la actividad que se debe llamar en ese momento? Estoy bastante confundido en este momento ...

+0

Puede ser porque el fragmento de diseño xml está inflado utilizando el contexto de actividades principales. Veamos lo que otros responderán. – blessenm

+0

¿Qué quiere decir "solo funciona si el método se implementa en' MainActivity.java' ". ¿Recibes un error o tu código simplemente no te da el resultado que estás esperando? –

+3

http://stackoverflow.com/questions/7570575/onclick-inside-fragment-called-on-activity Aquí se responde la misma pregunta. – kzotin

Respuesta

4

No estoy seguro de cuál es el problema específico, pero quizás esto ayude.

De la documentación sobre Android Fragment s:

debe diseñar cada fragmento como un componente modular y reutilizable actividad. Es decir, dado que cada fragmento define su propio diseño y su propio comportamiento con sus propias devoluciones de llamada del ciclo de vida, puede incluir un fragmento en actividades múltiples, por lo que debe diseñar para su reutilización y evitar manipular directamente un fragmento de otro fragmento.

Es decir, nunca se debe manipular un fragmento de otro fragmento; más bien, esto debería hacerse a través de la Actividad subyacente. Lea la sección "Crear devoluciones de llamada de eventos a la actividad" en este article para obtener más información (¡es algo importante!).

Por otro lado, si desea que el botón para realizar una acción dentro del Fragment sí mismo (es decir, si usted quiere un clic Button para cambiar el texto de un TextView dentro del fragmento), se debe implementar esto en el Fragment, no el Activity (esto se debe a que el comportamiento resultante está incluido en Fragment y no tiene nada que ver con el padre Activity).

Deja un comentario y puedo aclarar si mi publicación es confusa ... Recientemente empecé a entender Fragment 's mismo :).

+4

Puedo confirmar que la preocupación de AndyAndroid está bien fundada. Y tengo el mismo problema con un TabHost y múltiples FragmentActivity. Básicamente, mi método onClick que se llama en el diseño espera que ese método se defina en la clase TabHost, NO en el Fragmento. De ahí el gran problema. –

+0

Quizás no estoy leyendo correctamente, esto está marcado como respuesta, pero ¿cómo hago que el oyente 'onClick' dentro de fragmento sin recurrir a la creación de oyentes mediante programación? – katit

0

Bueno,

supongo que está relacionada con la jerarquía de la estructura contexto androide. La actividad es el host de todas las vistas secundarias y, por lo tanto, puedes decir que fragmento está usando el contexto de su host. Y es por eso que cuando usas onClick con el sistema de fragmentos, siempre lo busca en la actividad Host del fragmento.

Compruébelo. Android developer onClick attribute description

No he comprobado una cosa pero podría poner una prueba. Proporcionando implementación en la actividad del host en lugar de hacerlo en fragmentos, pero use onClick en el archivo de diseño del fragmento. Debería llamar al método de los padres.

Cuestiones relacionadas