Se sabe que los Intents se usan en Android para pasar los datos de una actividad a otra. Pero hay otra forma, que se puede usar para pasar los datos de una actividad a otra de una mejor manera y con menos espacio de código, es decir, usando paquetes en Android. Los paquetes de Android generalmente se usan para pasar datos de una actividad a otra. Básicamente, aquí se usa el concepto de par clave-valor donde los datos que uno quiere pasar son el valor del mapa, que luego se puede recuperar usando la clave. Los paquetes se usan con intención y los valores se envían y recuperan de la misma manera, como se hace en el caso de Intent . Depende del usuario qué tipo de valores desea pasar, pero los paquetes pueden contener todo tipo de valores (int, String, boolean, char) y pasarlos a la nueva actividad.
Los siguientes son los principales tipos que se pasan/recuperan a/de un paquete:
putInt (clave de string, valor int), getInt (clave de string, valor int)
putString (clave de string, valor de string), getString (clave de string, valor de string)
putStringArray (clave de string, valor de string []), getStringArray (clave de string, valor de string [])
putChar (clave de string, valor de carácter), getChar (clave de string, valor de carácter)
putBoolean(clave de string, valor booleano), getBoolean(clave de string, valor booleano)
Uso del paquete en la aplicación de Android
El paquete siempre se usa con Intent en Android. Ahora, para usar Bundle, escriba el siguiente código en MainActivity.
Java
// creating a intent Intent intent = new Intent(this, SecondActivity.class); // creating a bundle object Bundle bundle = new Bundle(); // storing the string value in the bundle // which is mapped to key bundle.putString("key1", "GFG :- Main Activity"); // passing the bundle into the intent intent.putExtras(bundle); // starting the intent startActivity(intent);
Kotlin
// creating the instance of the bundle val bundle = Bundle() // storing the string value in the bundle // which is mapped to key bundle.putString("key1", "Gfg :- Main Activity") // creating a intent intent = Intent(this@MainActivity, SecondActivity::class.java) // passing a bundle to the intent intent.putExtras(bundle) // starting the activity by passing the intent to it. startActivity(intent)
Ahora crea otra actividad vacía llamada SecondActivity. Ahora, para recuperar los datos almacenados en el paquete, escriba el siguiente código en SecondActivity.
Java
// getting the bundle back from the android Bundle bundle = getIntent().getExtras(); // getting the string back String title = bundle.getString("key1", "Default");
Kotlin
// getting the bundle back from the android val bundle = intent.extras // performing the safety null check var s:String? = null // getting the string back s = bundle!!.getString("key1", "Default"))
Alternativamente, si uno no quiere usar el valor predeterminado también, puede hacerlo, pero recuerde que da una excepción.
Por ejemplo: boolean b = bundle.getBoolean(“pasa la clave aquí”);
Si no existe una asignación correspondiente a la clave, puede dar lugar a NullPointerException. Por lo tanto, se recomienda agregar valores predeterminados para el paquete.
Ejemplo
Paso 1: Crear un nuevo proyecto
- Haga clic en Archivo, luego en Nuevo => Nuevo proyecto.
- Elija Actividad vacía
- Seleccionar idioma como Java/Kotlin
- Seleccione el SDK mínimo según su necesidad.
Paso 2: trabajar con el archivo activity_main.xml
Ahora agregue dos botones a la aplicación, un botón pasará los datos que están almacenados en el paquete y otro botón pasará el paquete vacío, es decir, borrará el paquete con bundle.clear() y luego pasará el paquete a Intent. El código completo para el archivo activity_main.xml se proporciona a continuación. Aquí se puede ver que el primer botón se usa para pasar el paquete no vacío, mientras que el segundo botón se usa para pasar el paquete vacío.
XML
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" android:padding="10dp" tools:context=".MainActivity"> <Button android:id="@+id/btnPassBundles" android:layout_width="275dp" android:layout_height="101dp" android:layout_marginTop="250dp" android:text="Pass Data Into Bundle" android:textSize="24sp" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/btnNoPassBundle" android:layout_width="277dp" android:layout_height="92dp" android:layout_marginBottom="220dp" android:layout_marginTop="75dp" android:text="Pass No Data/Empty BUNDLE" android:textSize="24sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/btnPassBundles" /> </androidx.constraintlayout.widget.ConstraintLayout>
Paso 3: crea otra actividad y llámala como SecondActivity
Ahora cree otra actividad vacía llamada SecondActivity. Siga el procedimiento ilustrado en la imagen que se muestra a continuación para crear otra actividad.
Paso 4: trabajar con el archivo activity_second.xml
En este archivo, agregue un TextView para mostrar el texto en SecondActivity.
XML
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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=".SecondActivity"> <TextView android:id="@+id/txtString" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="348dp" android:text="String from MainActivity" android:textSize="40sp" android:textStyle="bold" android:gravity="center" android:textColor="#008000" app:layout_constraintHorizontal_bias="0.428" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Paso 5: Trabajar con el archivo MainActivity
El código completo para MainActivity se proporciona a continuación. Se agregan comentarios para entender el código fácilmente.
Java
import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button btnPassBundles, btnNoPassBundle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnPassBundles = findViewById(R.id.btnPassBundles); btnNoPassBundle = findViewById(R.id.btnNoPassBundle); // one button will pass the bundle and other button // will not pass the bundle btnPassBundles.setOnClickListener(this); btnNoPassBundle.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btnPassBundles: // creating a bundle instance Bundle bundle = new Bundle(); // passing the data into the bundle bundle.putString( "key1", "Passing Bundle From Main Activity to 2nd Activity"); Intent intent = new Intent(MainActivity.this, SecondActivity.class); // passing the bundle to the intent intent.putExtras(bundle); // starting the activity by passing the intent // to it. startActivity(intent); break; case R.id.btnNoPassBundle: bundle = new Bundle(); bundle.putString( "key1", "Not passing Bundle From Main Activity"); // clearing the data stored into the bundle bundle.clear(); // passing the intent to the second activity intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtras(bundle); startActivity(intent); break; } } }
Kotlin
import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity(), View.OnClickListener { var btnPassBundles: Button? = null var btnNoPassBundle: Button? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btnPassBundles = findViewById(R.id.btnPassBundles) btnNoPassBundle = findViewById(R.id.btnNoPassBundle) // one button will pass the bundle and other button // will not pass the bundle btnPassBundles?.setOnClickListener(this) btnNoPassBundle?.setOnClickListener(this) } override fun onClick(view: View) { when (view.id) { R.id.btnPassBundles -> { // creating the bundle instance val bundle = Bundle() // passing the data into the bundle bundle.putString("key1", "Passing Bundle From Main Activity to 2nd Activity") val intent = Intent(this@MainActivity, SecondActivity::class.java) intent.putExtras(bundle) startActivity(intent) } R.id.btnNoPassBundle -> { val bundle = Bundle() bundle.putString("key1", "Not passing Bundle From Main Activity") // clearing the bundle bundle.clear() // passing the intent to the second activity intent = Intent(this@MainActivity, SecondActivity::class.java) // passing the bundle into the intent intent.putExtras(bundle) startActivity(intent) } } } }
Paso 6: trabajar con el archivo SecondActivity
El código completo para SecondActivity se proporciona a continuación. Se agregan comentarios para entender el código fácilmente.
Java
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class SecondActivity extends AppCompatActivity { TextView txtString; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); txtString = findViewById(R.id.txtString); // getting the bundle from the intent Bundle bundle = getIntent().getExtras(); // setting the text in the textview txtString.setText(bundle.getString("key1", "No value from the MainActivity")); } }
Kotlin
import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class SecondActivity : AppCompatActivity() { var txtString: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) txtString = findViewById(R.id.txtString) txtBoolean = findViewById(R.id.txtBoolean) // getting the bundle from the intent val bundle = intent.extras // setting the text in the textview txtString?.setText(bundle!!.getString("key1", "No value from MainActivity :(")) } }
Salida: ejecutar en el emulador
Publicación traducida automáticamente
Artículo escrito por lavishgarg26 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA