Activities II

Guardar estado

  • Si la aplicación se destruye y se vuelve a crear se pierden datos de interfaz.
  • Debemos sobreescribir métodos:
    • onSaveInstanceState(Bundle)
    • onRestoreInstanceState(Bundle)

Bundle

  • Elemento para almacenar valores
  • Pares llave-valor
  • putXX(String key, XX value)
  • getXX(String key)
  • Para transferir datos:
    • Intents -> putExtras(...)
    • Mi aplicación (destroy() -> create())
    • ...
  • Tipos de datos primitivos

onSaveInstanceState()

  • Hace falta super()
@Override
protected void onSaveInstanceState(Bundle outstate){
    super.onSaveInstanceState(outstate);
    TextView t = (TextView) findViewById(R.id.textView);
    outstate.putString("result", t.getText().toString());
    Log.v("result", t.getText().toString());
}

onRestoreInstanceState()

  • Hace falta super()
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);
    TextView t = (TextView) findViewById(R.id.textView);
    t.setText(savedInstanceState.getString("result"));
    Log.v("retrieving",savedInstanceState.getString("result"));
}

Ejercicio

  • Salvar el estado de la calculadora para que cuando se destruya y se vuelva a crear no se pierda ningún dato (ej: girar pantalla).
  • Utilizar estos dos métodos:
    • onSaveInstanceState(Bundle);
    • onRestoreInstanceState(Bundle);

Activity con resultado

  • startActivityForResult(Intent, int request);
  • onActivityResult(int request, int result, Intent i );
  • Cámara de fotos, obtener contacto...
// Crea un intent para seleccionar a un contacto
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
private void pickContact() {
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
} 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Si la petición se hizo correctamente y PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Hacemos la consulta del nombre del contacto.
        Cursor cursor = getContentResolver().query(
            data.getData(), 
            String[] {Contacts.DISPLAY_NAME}, null, null, null
        );
        if (cursor.moveToFirst()) { 
            // True si el cursor no está vacío
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex); 
            Toast.makeText(this, name).show();
         }
    }
}

13 - Activities II

By androidjedi

13 - Activities II

  • 444