¿Cómo enviar datos de actividad a fragmento en Android?

requisitos previos:

En Android, un fragmento es una parte de la interfaz de usuario que se puede usar una y otra vez. Fragment gestiona su propio diseño y tiene su propio ciclo de vida. Dado que el fragmento es una pequeña parte de la interfaz de usuario más grande, solo se puede inicializar dentro de una actividad u otro fragmento. Entonces, si deseamos mostrar cualquier tipo de recurso, como una string o una imagen dentro del fragmento, necesitaremos declararlos en la actividad y luego pasarlos al fragmento. Entonces, en este artículo, le mostraremos cómo puede pasar datos de una Actividad al Fragmento.

Implementación paso a paso

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: cree un diseño de fragmento personalizado (my_custom_fragment.xml) en la carpeta de diseño

Pasaremos una string al fragmento. Para mostrar esta string, implementamos un TextView.

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
  
    <!-- TextVIew to display the passed text -->
    <TextView
        android:id="@+id/fragmentTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="@color/white"
        android:textSize="50sp"
        android:background="#0f9d58"/>
  
</LinearLayout>

Paso 3: agregue EditText, Button y Frame en el archivo de diseño (actividad_principal.xml)

Consulte los comentarios dentro del código para una mejor comprensión.

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">
  
    <!-- We will type text in this EditText -->
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="50sp"/>
  
    <!-- Click this button to pass text 
         in EditText to the Fragment -->
    <Button
        android:id="@+id/button"
        android:layout_below="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Pass"/>
  
    <!-- Text will be displayed in a
          TextView in this Fragment -->
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_below="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
  
</RelativeLayout>

Paso 4: Cree una clase para el fragmento personalizado (MyCustomFragment.kt)

Esta es una clase de fragmento personalizado para inflar el diseño personalizado en el diseño del marco presente en la actividad principal.

Kotlin

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
  
class MyCustomFragment: Fragment() {
  
    // Declaring TextView from the custom fragment layout
    private lateinit var myTextView: TextView
  
    // Override function when the view is being created
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
  
        // Inflates the custom fragment layout
        val view: View = inflater.inflate(R.layout.my_custom_fragment, container, false)
  
        // Finds the TextView in the custom fragment
        myTextView = view.findViewById<View>(R.id.fragmentTextView) as TextView
  
        // Gets the data from the passed bundle
        val bundle = arguments
        val message = bundle!!.getString("mText")
  
        // Sets the derived data (type String) in the TextView
        myTextView.text = message
  
        return view
    }
}

Paso 5: inicialice la clase MyCustomFragment y pase los valores de EditText (MainActivity.kt)

En este programa, el valor EditText (string de entrada) se obtiene con un clic de botón. La clase de fragmento personalizada se inicializa y la string de entrada se pasa para obtener los resultados deseados. Consulte los comentarios dentro del código a continuación para una mejor comprensión.

Kotlin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring and initializing the EditText and Button from the layout
        val mEditText = findViewById<EditText>(R.id.editText)
        val mButton = findViewById<Button>(R.id.button)
  
        // Declaring fragment manager from making data
        // transactions using the custom fragment
        val mFragmentManager = supportFragmentManager
        val mFragmentTransaction = mFragmentManager.beginTransaction()
        val mFragment = MyCustomFragment()
  
        // On button click, a bundle is initialized and the 
        // text from the EditText is passed in the custom
        // fragment using this bundle
        mButton.setOnClickListener {
            val mBundle = Bundle()
            mBundle.putString("mText",mEditText.text.toString())
            mFragment.arguments = mBundle
            mFragmentTransaction.add(R.id.frameLayout, mFragment).commit()
        }
    }
}

Producción:

Podemos ver que cuando se escribe el texto en EditText y se hace clic en el botón, se muestra el mismo texto en nuestro fragmento personalizado.

Publicación traducida automáticamente

Artículo escrito por aashaypawar 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 *