studio - Cómo cerrar la actividad y volver a la actividad anterior en Android
retornar activity android (15)
Tengo una actividad principal, que cuando hago clic en un botón, comienza una nueva actividad, utilicé el siguiente código para hacerlo:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
El código anterior se ejecutó desde la actividad principal.
Ahora en mi nueva actividad que es llamada por la actividad principal, tengo un botón de retroceso. Cuando hago clic en este botón de retroceso, quiero que mi nueva actividad se cierre y debe volver a la actividad principal original.
Intenté llamar a super.finish()
y simplemente finish()
(desde la nueva actividad) pero esto cierra mi aplicación completa (incluida mi actividad principal).
¿Cómo puedo cerrar la actividad que está actualmente en foco y luego volver a la actividad principal?
EDITADO
El hecho de que el botón Atrás de mi teléfono también cierra toda mi aplicación, me lleva a pensar que he comenzado la segunda actividad incorrectamente.
OK, he estado buscando,
Creé una Actividad de Configuración que usa el mismo código de manifiesto y el mismo código para Iniciar la actividad.
Para la actividad de configuración cuando presiono el botón Atrás, vuelve a la actividad Principal.
Con la actividad mencionada anteriormente en la pregunta principal, simplemente sale de toda mi aplicación.
Entonces, el problema no parece ser el código para finalizar la actividad, sino la actividad en sí misma.
Creo que está llamando al método finish()
en MainActivity
antes de iniciar SettingsActivity
.
El escenario que ha descrito ocurrirá de la siguiente manera:
YA SEA
Ha configurado android:noHistory = "true"
para MainActivity
dentro de AndroidManifest.xml
que hace que MainActivity
finish
automáticamente al presionar la tecla de retroceso.
O
Antes de cambiar a ''SettingsActivity'', ha llamado a finish()
en su MainActivity
, que lo elimina. Cuando presiona el botón Atrás, ya que no hay ninguna otra actividad preestablecida en la pila para mostrar, vuelve a la pantalla principal.
Creo que su segunda actividad probablemente no esté vinculada a su actividad principal como actividad infantil. Verifique su archivo AndroidManifest.xml
y vea si la entrada <activity>
para su actividad secundaria incluye un atributo android:parentActivityName
. Debería verse algo como esto:
<?xml ...?>
...
<activity
android:name=".MainActivity"
...>
</activity>
<activity
android:name=".ChildActivity"
android:parentActivityName=".MainActivity"
...>
</activity>
...
Cuando haces clic en tu botón puedes hacer que llame:
super.onBackPressed();
El final cierra la aplicación completa, esto es algo que odio en el desarrollo de Android no terminar que está bien, pero que no se mantienen actualizados con la sintaxis correcta que tienen
startActivity(intent)
Por qué no
closeActivity (intención)?
Estás haciendo esto demasiado difícil. Si entiendo lo que intentas hacer correctamente, el botón "volver" incorporado y el propio Android harán todo el trabajo por ti: http://developer.android.com/guide/components/tasks-and-back-stack.html
Además, la implementación de un botón "volver" personalizado viola la Guía de calidad de la aplicación principal UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html
Esto cierra la aplicación completa:
this.finish();
No sé si esto es incluso útil o no, pero estaba luchando con el mismo problema y encontré una manera bastante fácil, con solo una variable booleana global y una acción onResume (). En mi caso, mi Actividad C si se hace clic en un botón específico, ¡debería desencadenar el final () de la Actividad B!
Activity_A -> Activity_B -> Activity_C
Activity_A (se abre normalmente Activity_B)
Activity_B (en algunos botones, haz clic en Activity_C):
// Global:
boolean its_detail = false;
// -------
SharedPreferences prefs = getApplicationContext().getSharedPreferences("sharedpreferences", 0);
boolean v = prefs.getBoolean("select_client", false);
its_detail = v;
startActivity(C);
@Override
public void onResume(){
super.onResume();
if(its_detail == true){
finish();
}
}
Entonces, cada vez que hago clic en el botón de la Actividad C, hago la función "onResume ()" de la Actividad B y regreso a la Actividad A.
Puede volver a la actividad anterior simplemente llamando a finish () en la actividad en la que se encuentra. Tenga en cuenta cualquier código después de que se ejecute la llamada a finish (); puede hacer una devolución después de llamar a finish () para solucionarlo.
Si desea devolver los resultados a la actividad uno, al iniciar la actividad dos necesita:
startActivityForResults(myIntent, MY_REQUEST_CODE);
Dentro de tu actividad llamada, puedes obtener el Intent del parámetro onCreate () o usar
getIntent();
Para establecer devolver un resultado a la actividad uno, entonces en la actividad dos
setResult(Activity.RESULT_OK, MyIntentToReturn);
Si no tiene intención de regresar, solo diga
setResult(Activity.RESULT_OK);
Si la actividad tiene malos resultados, puede usar Activity.RESULT_CANCELED (esto se usa de forma predeterminada). Luego en la actividad uno lo haces
onActivityResult(int requestCode, int resultCode, Intent data) {
// Handle the logic for the requestCode, resultCode and data returned...
}
Para finalizar la actividad dos, use los mismos métodos con finish () como se describió anteriormente con sus resultados ya establecidos.
Simplemente no llame a finish()
en su MainActivity
entonces esto elimina la necesidad de Anular su onBackPressed()
en su SecondActivity
menos que esté haciendo otras cosas en esa función. Si sientes la "necesidad" de este botón de retroceso, simplemente puedes llamar a finish()
en SecondActivity
y eso te llevará a MainActivity
siempre que no hayas llamado a finish()
en él.
es posible que esté llamando a finish (); en el evento de botón de clic para que la actividad principal se cierre justo después de hacer clic en el botón y cuando regrese de la actividad siguiente, la aplicación salga porque la actividad principal ya está cerrada y no hay actividad activa.
prueba este código en lugar de finish
:
onBackPressed();
si usas fragmentos debes usar
getActivity().onBackPressed();
si usa una sola actividad, puede usar
finish();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Pruebe esto, funciona tanto en el botón Atrás de la barra de herramientas como en el botón Atrás de hardware .
Button edit = (Button) view.findViewById(R.id.yourButton);
edit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(this, YourMainActivity.class);
startActivity(intent);
finish();
}
});
{ getApplicationContext.finish(); }
Prueba este método ...