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:
- ¿Dónde está getChildFragmentManager en la biblioteca de soporte v13?
- Fragmentos y cambio de orientación
- Intercambio de datos entre fragmentos y actividad en Android
- MapView google maps NullPointerException?
- RecyclerView dentro de SwipeRefreshLayout dentro de NestedScrollViewLayout no puede desplazarse
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.
- Botón de acción flotante Cambios de anclaje en la creación de vistas
- Android ViewPager Cargando fragmentos incorrectos
- Pasar los toques a la vista bajo
- Tabs y Swipe - editar el getItem para mostrar 3 fragmentos diferentes
- Android Fragment desaparece después de renderizar
- Fragmentos de Viewpager no se muestran después de la primera vez
- IU de Tablet Android: fragmento de múltiples paneles o diseño lineal
- Error al inflar el fragmento de clase - id / illegalargumentexception duplicado?
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