2011-11-13 17 views
7

Estoy tratando de entrar en la programación de Android, y me han dado algunos ejemplos de un libro. En el ejemplo de éstos se solicita para poner el siguiente código:¿Por qué el objeto Bundle siempre es nulo en onCreate()?

public class ExemploCicloVida extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     Log.i(TAG, getClassName() + " onCreate() called on: " + icicle); 

     TextView t = new TextView(this); 
     t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat"); 
     setContentView(t); 
    } 
} 

Me pregunto por qué objeto Bundle es siempre nula en este caso.

Respuesta

2

Ejecute este código y gire la pantalla presionando Ctrl + F11. El paquete no será nulo.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (savedInstanceState != null) { 
     Toast.makeText(this, savedInstanceState.getString("s"), 
       Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    outState.putString("s", "hello"); 
} 

onSaveInstanceState(Bundle) se llamará. A continuación, se crea el objeto de actividad y se llamará al onCreated(Bundle) con Bundle savedInstanceState no nulo.

+1

Gracias wannik. API me dio la pista y también la tuya, simplemente escribí Ctrl + F11 en mi propio código, y el carámbano ya no era nulo. –

8

En mi caso, la razón era que la actividad específica no tenía un tema declarado en el archivo de manifiesto.

Para solucionar esto, abra AndroidManifest.xml, haga clic en Aplicación, seleccione la actividad bloqueada en Nodos de aplicación y agregue el tema en el campo Tema de Atributos. En mi caso, era

@style/Theme.AppCompat.Light.DarkActionBar 

pero podría copiar el tema de una de sus otras actividades.

P.S .: Sé que esta es una respuesta a una pregunta anterior, pero me encontré con ella mientras buscaba una solución y no encontré una solución que funcionara, así que esto podría ayudar a otros.

+1

muchas gracias por su aporte a esto !!! Me salvaste un montón de dolores de cabeza ... ¡Había cambiado el tema en mi actividad anterior pero no en la actividad en la que obtenía el puntero nulo! ¡Nunca hubiera soñado que este era el problema! De nuevo ... ¡ceda mile failte! –

+0

¡De nada! Perdí muchas horas para resolverlo, así que me alegra saber que ayudó a alguien a no pasar por todo esto. –

0

Supongo que le gustaría leer los parámetros que entran a su actividad. Utilice esta función:

protected String getStringExtra(Bundle savedInstanceState, String id) { 
String l; 
l = (savedInstanceState == null) ? null : (String) savedInstanceState 
      .getSerializable(id); 
if (l == null) { 
    Bundle extras = getIntent().getExtras(); 
    l = extras != null ? extras.getString(id) : null; 
} 
return l; 
} 
Cuestiones relacionadas