Un Fragment en Android es una subactividad. Una sola actividad puede albergar múltiples fragmentos. Así que, por ejemplo, si necesitas una página principal con subpáginas, entonces necesitas pensar en Fragmentos. Lo interesante es que los Fragmentos tienen su propio ciclo de vida y por lo tanto nos proporcionan una forma independiente de trabajar sin tener que depender tanto de las actividades.

Este tutorial enseña cómo utilizar los fragmentos a través de sencillos Ejemplos How To basados en Kotlin Android.

Ejemplo 1: Kotlin Android - Mostrar Fragment en Activity

La actividad tendrá un botón que al ser pulsado muestra un fragmento. Aquí está la imagen de demostración de lo que se crea:


Kotlin Android Fragment Example

Paso 1: Dependencias

No se necesitan dependencias de terceros para este proyecto.

Paso 2: Diseños

Necesita dos diseños: uno para el fragmento y otro para la actividad principal.

(a). fragmento.xml

Este es el diseño para el "fragmento". Simplemente contendrá un texto nuevo:

<?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="match_parent">

    <TextView
        android:id="@+id/txt_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top|left"
        android:text="@string/str_fragment"
        android:textColor="#2a2a2a"
        android:layout_margin="10dp"
        android:padding="10dp"/>

</LinearLayout>

**(b). actividad_principal.xml

Este es el diseño de la "actividad" principal. Contendrá un botón y un framelayout. Cuando el usuario hace clic en el botón, el fragment se inicializa y se muestra en el framelayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.9"
        android:text="@string/show"/>

    <FrameLayout
        android:id="@+id/fragment_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.1">

    </FrameLayout>
</LinearLayout>

Paso 3: Crear un Fragmento

El tercer paso es crear el "fragmento" e inflar su diseño. Un fragmento se crea extendiendo la clase androidx.fragment.app.Fragment. Se infla anulando la función onCreateView() y devolviendo un objeto vista inflado a partir de un layout para el fragment.

Aquí está el código completo:

Fragmento_uno.kt


import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.fragment.*

class Fragment_one : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment,container,false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        txt_fragment.setOnClickListener {
            Toast.makeText(activity,"text fragment",Toast.LENGTH_SHORT).show()
        }

    }

}

Paso 4: Crear MainActivity

Esta es la actividad que albergará el fragmento. Los fragmentos no existen por sí mismos, sino que son alojados por las actividades. Una sola "actividad" puede albergar varios "fragmentos".

Para mostrar un fragmento dentro de una actividad, es necesario realizar lo que se denomina una transacción de fragmento. Dicha transacción puede consistir en añadir un fragmento, eliminar un fragmento, sustituir un fragmento, etc. En nuestro caso estamos interesados en reemplazar nuestro framelayout por nuestro fragment. Aquí está el código para hacerlo:


    fun showFragment(fragment: Fragment_one){
        val fram = supportFragmentManager.beginTransaction()
        fram.replace(R.id.fragment_main,fragment)
        fram.commit()
    }

Aquí está el código completo de esta actividad:

MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn_show.setOnClickListener {

            val fragment = arb.test.fragment.Fragment_one()
            showFragment(fragment)

        }

    }

    fun showFragment(fragment: Fragment_one){
        val fram = supportFragmentManager.beginTransaction()
        fram.replace(R.id.fragment_main,fragment)
        fram.commit()
    }
}

Ejecutar

Ahora ejecuta el proyecto.

Referencia

Descargue el código de abajo:

No. Link
1. Descargar código
2. Seguir autor del código

Categorizado en:

Etiquetado en: