Android obtener actividad devuelve null
Estoy utilizando barra de acción en una actividad. Para cada lengüeta estoy mostrando diversa disposición. Dado que el diseño es demasiado pesado. Así que estoy inflando cada diseño en una vista. Así que en cada ficha seleccione
public void onTabSelected(Tab tab, FragmentTransaction ft) { if (mView == null) { mView = LayoutInflater.from(mAct).inflate(mLayout, null); // mAct is Activity reference } mAct.setContentView(mView); for (int i = 0; i < mFrags.length; i++) { mFrags[i] = (LutronFragment) mAct.getFragmentManager() .findFragmentById(mIds[i]); if (mFrags[i] != null) { mFrags[i].setupHeader(); } } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { for (Fragment f : mFrags) { try { if (f != null) { ft.remove(f); } } catch (IllegalStateException e) { e.printStackTrace(); } } }
Así que ahora si selecciono la pestaña segunda vez y hacer alguna operación en esa pestaña, la aplicación se estrelló en getActivity. (NullPointerException)
- Cómo configurar android: orientation = "horizontal" programmatically in RelativeLayout?
- ¿Cómo agregar el cajón de navegación a todas las actividades de la aplicación?
- Menú Opciones de ICS de Android con imágenes
- La vista personalizada de Android vuelve a la posición original al actualizar
- Crear visualizador de espectro de audio android app
Por favor, sugiera si hay algún otro enfoque para poner en caché el diseño pesado.
- ListView in Scroll Ver mi vista de desplazamiento se mueve a la parte superior de listview. ¿Cómo puedo evitar esto?
- Android no está recolectando el archivo derecha dimens.xml de la carpeta de valores
- GUIs basadas en XML y rendimiento
- TextView empuja los controles situados a la derecha de la pantalla
- Admob AdView que hace que ScrollView se desplace cuando se muestra
- Android: cómo utilizar XML para el diseño de vista personalizada
- Crear un diseño chatView en android
- Cómo configurar un fondo translúcido para un diseño de forma programática?
El problema es más probable que esté utilizando un fragmento antiguo que se ha desvinculado de su actividad.
Por lo tanto, la primera vez que crea su fragmento, se añade a su actividad. Todo es bueno. A continuación, cuando cambie la pestaña, el fragmento puede o no puede separarse de la actividad. Cuando se vuelve a getActivity()
, el fragmento antiguo se puede separar de la actividad y así getActivity()
devuelve null.
Esto puede suceder si está intentando mantener referencias a sus Fragmentos, en lugar de acceder a ellos a través del FragmentManager
.
También puede ocurrir si su adaptador está devolviendo una referencia a un fragmento en lugar de un nuevo fragmento. He caído en esta trampa.
(Publicar el código en el que creas tus fragmentos podría ayudarte)
Editar
Tal vez echar un vistazo a esto y cómo crear añadir sus oyentes de ActionBar. Necesita tener alcance para su Actividad. La forma en que lo hacen es definir el oyente en la Actividad / Fragmento (mediante la implementación de una interfaz) y luego adjuntarlo a la pestaña. Esto le dará alcance y es probablemente una forma más estable de hacer las cosas.
Esto puede ocurrir si crea un objeto anónimo dentro de un fragmento que llama a getActiviy()
. Si getActivity()
se llama en el objeto anónimo después de que el fragmento se extrae de la pila de fragmentos, getActivity()
devolverá null. En ese momento, el fragmento ya no está asociado con una actividad.