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:
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 |