2012-04-12 9 views
10

El siguiente se ejecuta en un Android 1.6, así que estoy usando el paquete de compatibilidad para fragmentos. En la siguiente TestFragment es una clase anidada estática:Fragment.onCreateView tiene un contenedor nulo

public class FragmentTestActivity extends FragmentActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

public static class TestFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     TextView result = new TextView(getActivity()); 
     result.setText("Hello TestFragment"); 
     return result; 
    } 
} 

}

El archivo main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent"> 
<fragment class="com.test.FragmentTestActivity$TestFragment" 
     android:id="@+id/test" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" /> 
</FrameLayout> 

Lo extraño es que el parámetro de contenedores en onCreateView es null.

Ahora, si agrego el fragmento programáticamente así (solo cambie el método onCreate de la Actividad) el contenedor ya no es nulo. ¿Por qué?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Fragment frag = new TestFragment(); 
    getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit(); 
} 
+1

Tengo un problema similar. Pensé que el contenedor era parte del diseño de la actividad, donde el fragmento está incrustado. ¿Cómo puede ser eso nulo? –

Respuesta

0

La documentación menciona que puede ser nulo:

Ver pública onCreateView (LayoutInflater inflado, contenedor ViewGroup, Bulto savedInstanceState)

[...]

contenedor: Si no es nulo, esta es la vista principal a la que se debe conectar la UI del fragmento . El fragmento no debe agregar la vista a sí misma, pero esto se puede utilizar para generar los LayoutParams de la vista .

Para que quede claro: no debe hacer nada como container.addView(...).

+4

Eso no es lo que está haciendo sin embargo. Él dice que al inflar desde un layout xml, el contenedor es nulo a pesar de que hay una vista principal en la que está contenido el Fragmento. No creo que eso ocurra. – DeeV

+0

Lo siento, no estaba claro. Sé que actualmente no está haciendo 'container.addView (...)', pero supuse que quería hacerlo, y es por eso que notó que 'container' a veces es' null'. Los documentos dicen "Si no es nulo", lo que significa que está perfectamente bien para que sea 'nulo', y no importa si es' nulo' porque nunca necesita agregarle ninguna vista. – Timmmm

+0

Deseo, por ejemplo, tener un BroadcastReceiver que actualice el fragmento en ciertos casos. Guardar el contenedor para futuras actualizaciones hubiera sido una gran solución, pero tener un contenedor nulo significa que debo encontrar otra forma de hacerlo – Shushu

Cuestiones relacionadas