Excepción de puntero nulo al finalizar la actividad en Android

Tengo una Actividad que tiene dos diseños diferentes basados ​​en la vista de cuadrícula y la vista de galería de página completa, cuando el usuario hace clic en una imagen en la vista de cuadrícula, va a la galería de pantalla completa. Cuando el usuario está en la Galería de pantalla completa y cuando se hace clic en el botón Atrás, vuelve a la vista de cuadrícula. Finalmente, si el usuario vuelve a hacer clic en el botón Atrás, quiero que la Actividad finalice.

Así es como manejo el cambio de vistas al presionar el botón Atrás. Funciona bien, excepto que finaliza la actividad. Tengo una excepción de puntero nulo en la línea que llamo finish(). ¿Cómo puedo manejarlo?

@Override
public void onBackPressed() {

    ViewPager mPager = (ViewPager) findViewById(R.id.gallery_view);

    if(mPager.getVisibility() == View.VISIBLE){

        setContentView(R.layout.thumbnail_gallery);
        GridView g = (GridView) findViewById(R.id.myGrid);
        g.setAdapter(new GridGallery(this));

        return;

    }else {
        finish();
        return;
    }
}

preguntado el 22 de mayo de 12 a las 08:05

No obtuve las soluciones para aceptar las respuestas dadas para mis preguntas. Si simplemente acepto todas las respuestas o una de las respuestas, incluso si no es la solución exacta, puedo guiar a las personas por el camino equivocado y hacerles perder el tiempo. Si miras mi perfil, verás que la mayoría de las respuestas ni siquiera están relacionadas con la pregunta. Gracias por el comentario. -

Creo que logcat puede ayudar a resolver un problema:

intenta llamar super.onBackPressed(); en lugar de finish(); -

Gracias por el comentario encontré la respuesta. He visto este problema en otro lugar en stackoverflow. Si vota a favor de la pregunta, puede ayudar a los demás. -

Si encontraste la solución, publícala como respuesta y acéptala =) -

1 Respuestas

He encontrado la razón de NullPointerException En el final. El método findViewById lo causa En lugar de verificar la visibilidad del diseño, he usado una variable booleana para verificarlo. Básicamente, cuando configuro la vista de contenido en un diseño, asigno esta variable a verdadero, y luego, cuando cambio la vista, también cambio la variable booleana a falso. Funciona bastante bien.

@Override
public void onBackPressed() {

    if(isGalleryVisible) {

        setContentView(R.layout.thumbnail_gallery);
        GridView g = (GridView) findViewById(R.id.myGrid);
        g.setAdapter(new GridGallery(this));
        isGalleryVisible = false;
        return;
    } else {
        finish();
        return;
    }
}

Y en el lugar donde cambio la vista, la asigno como verdadera. Echa un vistazo a continuación.

GridView g = (GridView) findViewById(R.id.myGrid);
g.setAdapter(new GridGallery(context));
isGalleryVisible = false;
g.setOnItemClickListener(new OnItemClickListener() {

  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
     myPagerAdapter = new MyPagerAdapter(context);
     pager = (ViewPager) findViewById(R.id.gallery_view);
     pager.setAdapter(myPagerAdapter);
     pager.setCurrentItem(position);
     isGalleryVisible = true;
  }
});

Respondido el 02 de junio de 13 a las 11:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.