Paquete en Android con ejemplo

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

  1. Haga clic en Archivo, luego en Nuevo => Nuevo proyecto.
  2. Elija Actividad vacía
  3. Seleccionar idioma como Java/Kotlin
  4. 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.

SecondActivity

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *