Um Fragmento no Android é uma subactividade. Uma única atividade pode hospedar múltiplos fragmentos. SO, por exemplo, se você precisa de uma página principal com sub-páginas, então você precisa pensar em Fragmentos. O interessante é que os "fragmentos" têm seu próprio ciclo de vida e assim nos proporcionam uma forma independente de trabalhar sem ter que confiar tanto em "atividades".

Este tutorial ensina como utilizar "fragmentos" através de exemplos simples baseados no Kotlin Android.

Exemplo 1: Kotlin Android - Mostrar Fragmento em Atividade.

A "atividade" terá um botão que, quando clicado, mostra um "fragmento". Aqui está a imagem de demonstração do que é criado:


Kotlin Android Fragment Example

Etapa 1: Dependências

Não são necessárias dependências de terceiros para este projeto.

Passo 2: Layouts de projeto

Você precisa de dois layouts: um para o "fragmento" e outro para a "atividade" principal.

**(a). fragmento.xml***.

Este é o layout do fragmento. Ele simplesmente conterá um texturizado:

<?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). activity_main.xml***

Este é o layout para a principal atividade. Ele conterá um botão e um "framelayout". Quando o usuário clica no botão, e o "fragmento" é inicializado e renderizado no "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>

Passo 3: Criar um "Fragmento".

O terceiro passo é criar o verdadeiro fragmento e inflar seu layout. Um fragmento é criado ampliando a classe androidx.fragment.app.fragment.fragmento. Ele é inflado substituindo o onCreateView() e retornando um objeto de visão inflado a partir de um layout para o fragment.

Aqui está o código completo:

**Fragmento_um.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()
        }

    }

}

Passo 4: Criar `MainActivity'.

Esta é a "atividade" que irá hospedar o "fragmento". Os "fragmentos" não existem por si mesmos, mas são hospedados por "atividades". Uma única "atividade" pode hospedar múltiplos "fragmentos".

Para mostrar um "fragmento" dentro de uma "atividade", você precisa realizar o que é chamado de "Fragmento" de Transação. Tal transação pode ser adicionar um "fragmento", remover um "fragmento", substituir um "fragmento", etc. Em nosso caso, estamos interessados em substituir nosso framelayout por nosso fragmento. Aqui está o código para fazer isso:


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

Aqui está o código completo para esta atividade:

**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()
    }
}

Correr

Agora execute o projeto.

Referência

Faça o download do código abaixo:

Não. Link Link
1. Download código
2. Siga autor do código

Categorized in: