¿Qué es onBackPressed() en Android?
Esta es una función de anulación que se llama cuando el usuario presiona el botón Atrás en un dispositivo Android. Tiene grandes implicaciones en el ciclo de vida de la actividad de la aplicación. La documentación oficial establece que se llama al método onBackPressed() cuando la actividad ha detectado que el usuario presionó la tecla Atrás. La implementación predeterminada simplemente finaliza la actividad actual, pero puede anular esto para hacer lo que quiera.
Entonces, a través de este artículo, le mostraremos cómo puede anular este método y retener los datos de actividad. Pero antes de eso, es necesario comprender el ciclo de vida de la actividad en Android. Consulte este artículo para comprender mejor el Ciclo de vida de la actividad en Android: Ciclo de vida de la actividad en Android con la aplicación de demostración .
Este artículo tiene 4 partes:
- Cree un código de plantilla para comprender los eventos clave de navegación y los métodos vinculados del ciclo de vida de la actividad (omita si conoce el ciclo de vida de la actividad)
- Anular el método de pulsado en la parte posterior
- Probando Editar Texto
- Prueba de vista de texto
1. Cree un código de plantilla para comprender los eventos clave de navegación y los métodos vinculados del ciclo de vida de la actividad
Paso 1: crea un nuevo proyecto en Android Studio
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Demostramos la aplicación en Kotlin, así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.
Paso 2: anular todos los métodos en el ciclo de vida de la actividad
Implementamos un mensaje Toast en cada método para comprender qué método se llama durante el ciclo de vida de la actividad. Ahora simplemente ejecuta el proyecto en un dispositivo o un emulador.
Kotlin
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Toast.makeText(applicationContext, "onCreate", Toast.LENGTH_SHORT).show() } } override fun onPause() { super.onPause() Toast.makeText(applicationContext, "onPause", Toast.LENGTH_SHORT).show() } override fun onStop() { super.onStop() Toast.makeText(applicationContext, "onStop", Toast.LENGTH_SHORT).show() } override fun onDestroy() { super.onDestroy() Toast.makeText(applicationContext, "onDestroy", Toast.LENGTH_SHORT).show() } override fun onRestart() { super.onRestart() Toast.makeText(applicationContext, "onRestart", Toast.LENGTH_SHORT).show() } override fun onStart() { super.onStart() Toast.makeText(applicationContext, "onStart", Toast.LENGTH_SHORT).show() } override fun onResume() { super.onResume() Toast.makeText(applicationContext, "onResume", Toast.LENGTH_SHORT).show() } }
Paso 3: Ejecute el programa
- Cuando se inicia la aplicación: onCreate, onStart, onResume
- Cuando se presiona el botón de descripción general de la aplicación: onPause, onStop
- Cuando se presiona el botón de inicio: onPause, onStop
- Cuando se presiona el botón Atrás: onPause, onStop, onDestroy
Producción:
Observación:
Podemos ver que en cualquier caso que no sea la pulsación trasera, la actividad se detiene. Básicamente, no se destruye y los datos se conservan. Sin embargo, cuando se presiona el botón Atrás, la actividad se destruye, lo que significa que los datos temporales se pierden durante esta llamada. Esto es lo que dice la documentación oficial.
Pero no queremos perder estos datos. Para retener los datos, necesitamos anular el método de pulsación hacia atrás. El método presionado hacia atrás por naturaleza destruye la actividad. Haremos cambios de tal manera que la actividad se detenga pero no se destruya. Sigue leyendo.
2. Anule el método de pulsado en la parte posterior
Por favor, lea los comentarios en el código.
Kotlin
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Toast.makeText(applicationContext, "onCreate", Toast.LENGTH_SHORT).show() } // Overriding onBackPressed method override fun onBackPressed() { // Implement this method to stop // the activity and go back this.moveTaskToBack(true) } override fun onPause() { super.onPause() Toast.makeText(applicationContext, "onPause", Toast.LENGTH_SHORT).show() } override fun onStop() { super.onStop() Toast.makeText(applicationContext, "onStop", Toast.LENGTH_SHORT).show() } override fun onDestroy() { super.onDestroy() Toast.makeText(applicationContext, "onDestroy", Toast.LENGTH_SHORT).show() } override fun onRestart() { super.onRestart() Toast.makeText(applicationContext, "onRestart", Toast.LENGTH_SHORT).show() } override fun onStart() { super.onStart() Toast.makeText(applicationContext, "onStart", Toast.LENGTH_SHORT).show() } override fun onResume() { super.onResume() Toast.makeText(applicationContext, "onResume", Toast.LENGTH_SHORT).show() } }
Producción:
Ahora podemos observar que en la pulsación trasera, la actividad se detendrá pero no destruirá. Ahora implementaremos alguna interfaz de usuario para probar si esto realmente funciona. Sigue leyendo.
3. Probando EditText
Paso 1: agregue EditText en el archivo de diseño (actividad_principal.xml)
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/et1" android:layout_width="match_parent" android:layout_height="50sp" android:textSize="25sp" android:inputType="text" android:layout_centerInParent="true"/> </RelativeLayout>
Para probar EditText, no necesitamos codificar nada en el código principal que no sea lo que se especifica en el código anterior (Anular el método presionado en la parte posterior).
Aporte:
Escriba cualquier cosa en EditText y presione el botón Atrás. Regrese a la aplicación y notará que el texto se retiene en la barra EditText.
Producción:
El texto en EditText se conserva. Esto significa que nuestro método funciona bien. Ahora lo probaremos en un TextView. Sigue leyendo.
4. Prueba de vista de texto
Paso 1: agregue una vista de texto y un botón en el archivo de diseño (actividad_principal.xml)
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click the button" android:textSize="40sp" android:layout_centerInParent="true"/> <Button android:id="@+id/btn1" android:layout_below="@id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click" android:layout_centerHorizontal="true"/> </RelativeLayout>
Paso 2: agregue funcionalidad a estos elementos a través del código principal (MainActivity.kt)
Kotlin
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.TextView import android.widget.Toast class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Toast.makeText(applicationContext, "onCreate", Toast.LENGTH_SHORT).show() // TextView and Button val tv1 = findViewById<TextView>(R.id.tv1) val btn1 = findViewById<Button>(R.id.btn1) // A code to increment a variable and // display it on TextView on Button Click var k = 0 btn1.setOnClickListener { tv1.text = k.toString() k++ } } override fun onBackPressed() { this.moveTaskToBack(true) } override fun onPause() { super.onPause() Toast.makeText(applicationContext, "onPause", Toast.LENGTH_SHORT).show() } override fun onStop() { super.onStop() Toast.makeText(applicationContext, "onStop", Toast.LENGTH_SHORT).show() } override fun onDestroy() { super.onDestroy() Toast.makeText(applicationContext, "onDestroy", Toast.LENGTH_SHORT).show() } override fun onRestart() { super.onRestart() Toast.makeText(applicationContext, "onRestart", Toast.LENGTH_SHORT).show() } override fun onStart() { super.onStart() Toast.makeText(applicationContext, "onStart", Toast.LENGTH_SHORT).show() } override fun onResume() { super.onResume() Toast.makeText(applicationContext, "onResume", Toast.LENGTH_SHORT).show() } }
Aporte:
Siga haciendo clic en el botón, el número en TextView seguirá aumentando. Ahora intente con el botón Atrás y abra la aplicación nuevamente. El texto se conserva en TextView.
Producción:
Nuestro método funciona perfectamente bien. Ahora use este método en sus códigos para retener los datos de actividad.
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA