FindViewById devuelve null en una vista <include>
Vamos directamente al código.
Código de actividad, método onCreate
- Desarrollo de una pantalla de inicio de Android
- Android - inAnimation funciona para ViewFlipper pero outAnimation no
- ¿Cómo obtener las flechas derecha / izquierda en Actividad para indicar más pantallas a la derecha / izquierda?
- Android - Control de animación de viewflipper con el dedo / táctil?
- Android: ViewFlipper o ViewPager - ¿Cuál es la mejor opción?
setContentView(R.layout.main); View main_view = findViewById(R.id.main_view); View view_flipper = main_view.findViewById(R.id.vf); View first_tab = view_flipper.findViewById(R.id.prev_pane);
El código de diseño main.xml:
<ViewFlipper android:id="@+id/vf" android:layout_width="fill_parent" android:layout_height="fill_parent" > <include android:id="@+id/prev_pane" layout="@layout/vf_inner" /> <include android:id="@+id/cur_pane" layout="@layout/vf_inner" /> <include android:id="@+id/next_pane" layout="@layout/vf_inner" /> </ViewFlipper>
¡El problema! Vista principal se encuentra correctamente, por lo que es ViewFlipper, pero prev_pane o cur_pane o next_pane no se encuentran, un puntero nulo se devuelve. ¿Alguna idea por qué?
Esta actividad se llama a través de una pestaña mediante un Intent. Todas las referencias se resuelven correctamente excepto que el id en incluye
Cuando inspecciono variables, encuentro los contenidos de vf_inner layout en mChildren
- Cómo establecer ninguna animación para la primera vista de ViewFlipper
- Cómo deslizar imágenes en ViewFlipper o ViewPager
- Cómo agregar mediante programación varios LinearLayouts en una vista y, a continuación, agregar a ViewFlipper?
- Cómo cambiar el atributo 'android: autoStart' de ViewFlipper en RemoteViews mediante programación?
- Cómo cargar imágenes de la URL en el widget de la aplicación Android?
- ¿La mejor práctica para viewflipper que contiene 10 linearlayouts?
- Android: ViewFlipper que restablece mi marquesina TextView
- Hacer diferencias entre setOnClickListener y setOnTouchListener
Esto se debe a que las etiquetas <include />
no son una vista real en la jerarquía de la interfaz de usuario. Son más de una copia y pega instrucciones para las herramientas de Android.
Si desea encontrar los paneles en tiempo de ejecución, agregue los ID a los elementos raíz de los diseños incluidos. De esta manera se pueden encontrar a través de findViewById()
.
Una cosa que puedes hacer es envolver las sentencias <include>
dentro de un diseño padre (que sigue siendo un niño de tu diseño padre principal). Dale a esas vistas diferentes ids para que puedas findViewById
cada uno de ellos por separado.