2011-09-29 24 views
20

Tengo curiosidad por una cosa. ¿Cómo puedo terminar mi actividad actual y comenzar otra?Android finaliza la actividad y comienza otra

Ejemplo:

MainActivity 
    --(starts)--> LoginActivity 
     --(if success, starts)--> SyncActivity 
      --(if success start)--> MainActivity (with updated data). 

por lo que quiero, cuando se inicia SyncActivityMainActivity después de la sincronización exitosa y si presiono el botón de regreso no volver a SyncActivity o cualquier otra actividad se abrió antes de SynActivity.

He tratado con este código:

Intent intent = new Intent(Synchronization.this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(intent); 
this.finish(); 

pero no está funcionando correctamente. ¿Alguna idea de cómo hacer que las cosas funcionen correctamente?

+0

¿qué significa "al mismo tiempo"? – Blackbelt

+0

Me acaba de arreglar la pregunta –

Respuesta

45

Uso

Intent intent = new Intent(SyncActivity.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
+17

Ohh poderosas banderas, yu tan por descubrir ... (- – Audrius

+2

Tenga en cuenta que cuando no se llama explícitamente 'finish();' el método de ciclo de vida 'onDestroy()' no se llamará después de ' startActivity (intención); '. – heyarne

3

A juzgar por su OP, no estoy seguro de si es absolutamente necesario inicializar su mainActivity dos veces ..

Android está diseñado para que una aplicación no está realmente cerrado por el usuario . Concéntrese en sustituyendo los métodos del ciclo de vida android como onResume y OnPause para guardar los datos de interfaz de usuario, etc.

Por lo tanto, no es necesario que explícitamente finish() la actividad principal (y realmente no debería). Para recibir datos de inicio de sesión o sincronización de las actividades anteriores, simplemente anule el método OnActivityResult(). Sin embargo, para hacer esto, debe comenzar la actividad usando startActivityForResult(intent). Así que para cada actividad que debe hacer esto:

Actividad principal:

static public int LOGIN_RETURN_CODE = 1; 

para iniciar entrada:

Intent intent = new Intent(MainActivity.this, LogInActivity.class); 
startActivityForResult(intent, LOGIN_RETURN_CODE); 

para recibir registrado información:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case LOGIN_RETURN_CODE: 
     //do something with bundle attached 
    } 
} 

actividad ingreso:

static public int SYNC_RETURN_CODE = 2; 

al inicio de sincronización:

Intent intent = new Intent(LogInActivity.this, SyncActivity.class); 
startActivityForResult(intent,SYNC_RETURN_CODE); 

para recibir información y volver a la principal:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case MainActivity.SYNC_RETURN_CODE: 
      Intent intent = new Intent(...); 
      intent.setResult(RESULT_OK); 
      finish(); 
     } 
    } 

esto podría no todo compilar, pero espero que usted consigue la idea.

Cuestiones relacionadas