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