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