2012-06-12 16 views
6

Tengo un activity con dos fragments. No estoy usando <fragment/> etiquetas, tengo dos clases que se extiende Fragment, en ese fragmento, que tengo:Fragmentos y receptores de difusión

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.bfragment, container, false); // this will inflate the Fragment in activity. 
    } 

Ahora el problema es que estoy recibiendo algunos receptores de radiodifusión en la actividad de la que se actualizan algunos receptores de la interfaz de usuario de primer fragmento y algunas actualizaciones de la interfaz de usuario de 2nd.

Uno de mi receptor de radiodifusión definida en mi Acitivity principal es:

private BroadcastReceiver bcReceived = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      Log.d("", "BC Object Received"); 

      ActionBar actionbar = getActionBar(); 
      actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
      ActionBar.Tab bTab = actionbar.newTab().setText("B"); 
      Fragment fragment = new BFragment(); 
      bTab.setTabListener(new MyTabsListener(fragment)); 
      actionbar.addTab(bTab, true); 

      final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.bTable); // Getting null pointer exception here. linearLayout is not getting initialized. 

Quiero usar el LinearLayout arriba y utilizarlo para inflar una vista en ella. Pero obteniendo NPE.

aquí, cuando algunos receptores de difusión actualizan el primer fragmento, funciona correctamente, pero cuando un receptor de difusión actualiza el segundo fragmento de la actividad, obtengo NPE.

Mi pregunta es: ¿Cómo y dónde debo actualizar el fragmento? ¿Debería estar dentro de mi actividad? Si es así, ¿en qué método? si no, ¿dónde debería actualizar el fragmento?

Por favor, ayúdame !!!

+0

La disposición (R.layout.bfragment) es el mismo para los dos fragmentos? ¿R.id.bTable está presente en ambos fragmentos o no? –

+0

si está preguntando si ambos diseños son similares, entonces no. Pero ambos diseños se inflan en el mismo contenedor reemplazando el diseño anterior. – Shrikant

+0

R.id.bTable es su contenedor ¿verdad? –

Respuesta

25

Su lógica de actividad debe estar separada de su lógica de fragmentos.

se supone su actividad para manejar la lógica como:

necesito mostrar este fragmento en lugar de que uno

Sin embargo, su actividad se no supuesta para manejar este tipo de lógica :

necesito actualizar lo que hay dentro del fragmento

Es responsabilidad del fragmento actualizar su contenido. Por otro lado, la actividad puede indicar al fragmento que necesita actualizarse.

Con esto en mente, los fragmentos deben exponer métodos como

updateContent(With Blabla) 

O

updateContent() 

En su actividad, cuando el BroadcastReceiver recibe algo que debería:

  • Compruebe qué fragmento actualmente se muestra
  • Prepare el contenido para actualizar en el fragmento
  • Solicite al fragmento que actualice con el método updateContent(With Blabla).

O

  • Compruebe qué fragmento se muestra actualmente
  • Preguntar al fragmento que se actualice con el método updateContent().

Elija el método más simple según la lógica de negocios de su aplicación.

+0

Gracias por su respuesta Timothée Jeannin. Déjame implementarlo de esta manera. – Shrikant

+0

No hay problema, no dude en preguntar si necesita más explicaciones. Buena suerte con tu proyecto. :) –

+0

Muchas gracias. – Shrikant

Cuestiones relacionadas