2012-02-09 10 views
29

Utilizo un fragmento solo dentro de una actividad principal específica. Ahora me pregunto si hay algún inconveniente si llamo métodos en la actividad de los padres directamente a partir del fragmento incluido como esto:.Métodos de actividad de llamada desde el fragmento

getActivity() someMethodInParentActivitiy()

Una solución más común sería definir una interfaz de escucha formal en el fragmento para devolver la llamada a la actividad principal y luego hacer que la actividad implemente esa interfaz.

¿Hay alguna razón (por ejemplo fiabilidad o velocidad) por qué debería utilizar la segunda solución más compleja en lugar del método de dirigir las llamadas a partir del fragmento de la actividad?

Respuesta

21

No mire el rendimiento al principio. Recuerde que "la optimización prematura es la raíz de todo mal". El segundo enfoque es mejor porque tu fragmento podría usarse en diferentes actividades. El primer enfoque introduce más dependencias en su código, el fragmento depende del tipo de actividad. Estás perdiendo la capacidad de probar, reutilizar, pequeño complejo. Puede parecer ser más simple en este momento, pero en el futuro se verá ;-)

+0

Gracias, también noté que acceder al método de actividad directamente a través de getActivity() no es tan fácil. Probablemente necesito un elenco adicional? – Anguel

+0

Sí, a la implementación que contiene 'someMethodInParentActivitiy()'. Pero como escribí, no es recomendable. – pawelzieba

+0

En realidad, me confundí un poco, porque Diane Hackborn afirma que usar tales llamadas a métodos está bien: http://markmail.org/thread/sgvnc7bjtjfbh5rx#query:+page:1+mid:6kakhwquxdigf7om+state:results – Anguel

24

necesidad fundido adicional por hacer:

Activity activity123 = getActivity(); 

if(activity123 instanceof ParentActivity) { 
    ((ParentActivity) activity123).someMethodInParentActivity(); 
} 

sin embargo, como escribió @pawelzieba si quieres usar ese fragmento en otras actividades, que probablemente sea el caso, no funcionará de esta manera. Saludos

+0

buen trabajo ........ !!! –

9

Cuando tengo que hacer algo como esto, solo uso un BroadcastReceiver para poder llamar desde cualquier lugar.

BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action != null) { 
      if (action.equals("WHATEVER_ACTION")) { 
       // Do stuff 
      } 
     } 
    } 
}; 

Luego, en mi fragmento que acaba de utilizar:

activity.sendBroadcast (nueva Intención() setAction ("WHATEVER_ACTION").);

+1

me parece la mejor práctica. Un patrón de diseño básico, también. – rwst

+0

¿Tenemos que registrar la emisora ​​en manifiesto también para usarla solo para la comunicación entre actividad y fragmento? – Max

Cuestiones relacionadas