2012-02-05 14 views
5

Tengo dos actividades (actividad1 y actividad2) y cada actividad tiene un botón cada una. En activity1 tengo un spinner con pocas opciones. Supongamos que estoy seleccionando la opción 2 de esta ruleta y hago clic en el botón en actividad1, luego comienza actividad2. Cuando hago clic en el botón Atrás, se reanuda actividad1 y la misma opción 2 es visible (como lo necesito). Ahora el problema es que si mi activity2 se inicia y hago clic en un botón, se inicia activity1. Pero en lugar de reanudar el estado previo de actividad1, comienza de una manera que acaba de crear y se cambia la selección anterior. ¿Cómo puedo obtener el mismo servicio como el botón Atrás (no la posibilidad de volver a la actividad anterior, es decir, reanudar automáticamente el estado anterior de cualquier actividad) incluso cuando empiezo la actividad nuevamente? Simplemente necesito saber cómo mantener el estado previo de una actividad si se vuelve a visitar.Cómo mantener el estado anterior de una actividad

Es con este código que vaya de una actividad a otra cuando se hace clic en el botón:

Intent intent=new Intent(); 
intent.setClassName(getApplicationContext(),"com.myapp.activityname"); 

startActivity(intent); 

amablemente a me.i un principiante en Android, por lo que si alguno está dando la respuesta por favor explicarlo un poco. Gracias de antemano

+0

La documentación para esto se encuentra aquí: http://developer.android.com/reference/android/app/Activity.html –

Respuesta

9

Creo que encontré la respuesta. Déjame decir lo que he hecho en palabras simples,

Supongamos que estoy teniendo dos actividades actividad1 y actividad2 y estoy navegando de actividad1 a actividad2 (he hecho algunos trabajos en actividad2) y nuevamente a la actividad 1 haciendo clic en un botón en actividad1. Ahora, en esta etapa, quería volver a la actividad2 y quiero ver mi actividad2 en la misma condición en la última actividad que dejé2.

Para el escenario por encima de lo que he hecho es que en el manifiesto que hice algunos cambios como éste:

<activity android:name=".activity2" 
      android:alwaysRetainTaskState="true" 
      android:launchMode="singleInstance"> 
</activity> 

Y en el actividad1 en el evento de clic de botón que he hecho como éste:

Intent intent=new Intent(); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.setClassName(this,"com.mainscreen.activity2"); 
startActivity(intent); 

Y en actividad2 en el evento de clic de botón que he hecho de esta manera:

Intent intent=new Intent(); 
intent.setClassName(this,"com.mainscreen.activity1"); 
startActivity(intent); 

Ahora lo que duraran Lo que ocurre es que cualquiera que sean los cambios que hemos realizado en la actividad2 no se perderá, y podemos ver actividad2 en el mismo estado que dejamos anteriormente.

Creo que esta es la respuesta y esto funciona bien para mí.

+0

Deje de publicar esta respuesta una y otra vez. Si encuentra preguntas duplicadas, márquelas como tales. – Mat

3

Al anular el controlador de eventos onSaveInstanceState de una actividad, puede usar su parámetro Bundle para guardar valores de instancia. Aquí está un ejemplo:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    // Retrieve the View 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    // Save its state 
    outState.putString("My text", 
    myTextView.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

El paquete de salvado se introduce en los métodos y onRestoreInstanceStateonCreate si la aplicación se ve obligado a reiniciar durante una sesión. A continuación, puede extraer valores del paquete y usarlos para actualizar el estado de la instancia de la actividad. Aquí está un ejemplo:

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    String text = “”;  
    if (icicle != null && icicle.containsKey("My text")) { 
     text = icicle.getString(TEXTVIEW_STATE_KEY); 
    } 
    myTextView.setText(text); 
} 

Es importante recordar que onSaveInstanceState se llama sólo cuando una actividad se vuelve inactiva, pero no cuando se está cerrando por una llamada a finish o por el usuario pulsa el botón Atrás.

+0

Una pequeña explicación por favor –

+0

vea la respuesta actualizada. –

+0

¿qué pasa con todo el estado de esa actividad anterior. Quiero decir que la actividad está en un segundo plano, ¿hay alguna manera de simplemente traerla de vuelta al frente? Quiero decir, si muchos hilos se están ejecutando en esa actividad, creo que la mejor opción es traerlos al frente. –

0

Descargar source code o ver the entire post

Para la actividad de uno, es necesario utilizar la función startActivityForResult() que devuelve los valores de la actividad de los padres que es la actividad uno.

Intent intent = new Intent(MainActivity.this, Activity2.class); 
    startActivityForResult(intent, 1); 

y de recibir los valores de la actividad de dos sin alteración de la actividad de uno, agregue el código siguiente

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (requestCode == 1) { 
       if(resultCode == RESULT_OK){ 
        String text=data.getStringExtra("text"); 
        vTxt.setText("Name 1: "+eTxt.getText()+ "\n Name 2: "+text); 
       } 
      } 
     } 

Actividad 2

agregue el código siguiente para volver a la actividad uno y pasar algunos valores

  Intent intent=new Intent(Activity2.this, MainActivity.class); 

      Bundle extra=new Bundle(); 

      extra.putString("text", eTxt.getText().toString()); 
      intent.putExtras(extra); 
      setResult(RESULT_OK, intent); 
      finish(); 

Finalmente ha terminado

Cuestiones relacionadas