2011-07-27 16 views
7

No puedo, por la vida de mí, descubrir cómo actualizar una actividad después de presionar el botón Atrás. Actualmente tengo la actividad A que dispara la intención de ir a B y mientras estoy en el acto B, si presiona hacia atrás, quiero volver al acto A, pero hacer que se actualice. Puedo usar esta intención de actualizar la actividad de la actualidad:Usar onResume() para actualizar la actividad

Intent refresh = new Intent(this, Favorites.class); 
    startActivity(refresh); 
    this.finish(); 

Pero no puedo encontrar la manera de utilizar correctamente la función onResume() para actualizar mi acto A después de volver a ella.

+1

La razón probable de que su esquema actual de actualización funcione es porque está ejecutando la actividad en el modo de lanzamiento estándar. Esto significa que cada invocación de startActivity (refresh) genera una nueva instancia de actividad A. Dado que cada instancia nueva pasa por onCreate(), crear estas instancias innecesarias da la apariencia de actualizar su actividad. Para hacerlo correctamente, debe identificar el código en onCreate() que es responsable de "actualizar" la actividad y moverla a onResume(), como Ovidiu sugiere a continuación. – glorifiedHacker

Respuesta

10

Si necesitas un comportamiento especial de ActivityA al volver de ActivityB, se debería usar startActivityForResult(Intent intent, int requestCode) en lugar de startActivity(Intent intent):

startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

De esta manera, usted será capaz de detectar la terminación ActivityB 's en ActivityA por la sobrecarga onActivityResult(int requestCode, int resultCode, Intent intent):

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == REQUEST_CODE) { 
     doRefresh(); // your "refresh" code 
    } 
} 

Esto funciona incluso si usted termina ActivityB por la prensa del botón de retroceso. El resultCode será RESULT_CANCELLED por defecto en ese caso.

1

Debe colocar el código que actualiza la interfaz de usuario de su actividad en el método onResume(). Tal vez deberías publicar un código más o explicar qué estás tratando de actualizar exactamente.

+0

Tengo una actividad que contiene una vista de lista con 5 cadenas recuperadas de mi base de datos. Se ejecuta con un método BackService, es decir, si hay un cambio en la base de datos, recibiré una nueva notificación con una cadena. Si hago clic en esa notificación, la vista de lista también debe contener esa cadena. ¿OnResume() me permitirá hacer eso? – suraj

3

uso startActivityForResult(intent, requestCode); para iniciar Activity B de Activity A

después en Activity A anulación onActivityResult(int requestCode, int resultCode, Intent data)

allí se puede refrescar la Activity A

Cuestiones relacionadas