No obtenga el rootLayoutContainer en un fragmento (vista previa de Android 3.0)
Actualmente estoy entrando en la API de fragmentos de la Vista previa de Android 3.0 y he construido la siguiente codificación mínima:
Tengo una Actividad, que incluirá Fragmento (s), que actualmente se implementa de la siguiente manera:
- ¿Por qué se busca saveInstanceState == null al agregar fragmento?
- FragmentPagerAdapter no restaura fragmentos al cambiar de orientación
- Personalizar FragmentTabHost conjunto TabWidget en la parte inferior
- ActionBarSherlock con ViewPager no llamando ViewPager fragmentos métodos de ciclo de vida al ir y volver de backstack
- ¿Recuperar un objeto parcelable a través de un paquete siempre crea una nueva copia?
public class Cockpit extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cockpit); } public static class InfoFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment ViewGroup infoFragmentRoot = (ViewGroup) getActivity().findViewById( R.id.infoFragmentRoot) ; return inflater.inflate(R.id.infoFragment, container, false); } }
}
La distribución correspondiente de la actividad:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <fragment android:name="test.android.ui.cockpit.Cockpit$InfoFragment" android:id="@+id/infoFragment" android:layout_weight="1" android:layout_width="10dp" android:layout_height="match_parent" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="12dp" android:id="@+id/infoFragmentRoot" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> </fragment>
Ahora, no entiendo por qué el contenedor ViewGroup en el onCreateView () en la clase interna InfoFragment es un nullpointer, ni entiendo, por qué
ViewGroup infoFragmentRoot = (ViewGroup) getActivity().findViewById( R.id.infoFragmentRoot) ;
devuelve también null.
Gracias por la retroalimentación.
- FragmentStatePagerAdapter onPageSelected evento
- Android: limpiar la pila trasera sin hacer que Fragments pase por sus métodos de ciclo de vida
- Fragmento dentro ScrollView da parpadeo de fondo negro
- ¿Por qué no se recomienda la comunicación directa entre fragmentos?
- Cómo iniciar la actividad en una nueva ventana Utilización de WebView?
- Actividad de Android ClassNotFoundException - probado todo
- Tablas de ActionBar con la biblioteca de soporte
- Android: onPostResume se llama después de que se reanude el fragmento
Tienes algunos problemas aquí. En primer lugar, no desea agregar etiquetas dentro de la etiqueta <fragment>
. Piense en la etiqueta de fragmento como un marcador de posición. El método onCreateView () del fragmento es responsable de definir la jerarquía de vista de su fragmento, no el archivo XML de diseño de la actividad. Lo que puede hacer es crear un archivo XML de diseño independiente para que sea sólo el diseño del fragmento. Entonces dentro de onCreateView (), usted toma el insuflador pasado adentro, y hace algo como esto:
View v = inflater.inflate(R.layout.frag1, container, false); TextView text1 = (TextView) v.findViewById(R.id.text1); text1.setText( myTextData ); return v;
Observe que el parámetro attach para inflar () es falso? Android se encargará de adjuntar la vista devuelta a su contenedor más tarde.
No se garantiza que la jerarquía de vista de su actividad exista hasta que el fragmento obtenga la devolución de llamada onActivityCreated (). Así que el intento de obtener infoFragmentRoot podría devolver null dentro de onCreateView (). Pero ni siquiera estoy seguro de lo que está pasando cuando esa etiqueta está enterrada dentro de su <fragment>
.
En este caso en particular, donde has incrustado la etiqueta en el diseño de tu actividad, se llamará la devolución de llamada onInflate () de tu fragmento con el resto de los atributos de tu etiqueta. La teoría es que puedes agregar esos atributos al conjunto de argumentos en tu fragmento, y luego recuperar esos valores más adelante en onCreateView () (usando setArguments () y getArguments ()). Digo en teoría porque parece que hay un error en el código que maneja un cambio de configuración (por ejemplo, de paisaje a retrato), resultando en onInflate () que se llama después onCreateView () cuando el fragmento se está reconstruyendo después de un cambio de configuración. Consulte el informe de defectos http://code.google.com/p/android/issues/detail?id=14796 .
Por ahora, te recomiendo que extraes el diseño de tu fragmento a un archivo XML de diseño separado (por ejemplo, frag1.xml), el uso de mi código anterior para inflar ese diseño en onCreateView (). Y no te preocupes por los atributos que se pasan a onInflate ().
Tampoco desea utilizar onCreate para instanciar su diseño, que todos se manejarán dentro de la actividad principal. Salvar el paquete es todo lo que he hecho hasta ahora
- ¿Dónde está Android ejecución jar archivo? (Sólo por curiosidad)
- Guardar imagen de la cámara de Android en la carpeta personalizada