Fragmentit
Rakentakaa modulaarisia käyttöliittymiä Fragmenteilla. Tutustukaa fragmentin elinkaareen, ViewBindingin käyttöön fragmenteissa, argumenttien välittämiseen, paluupinon hallintaan ja fragmentin sekä Activityn väliseen viestintään.
Fragmentit on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 6/7. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 7 oppituntia.
Mitä Fragmentit ovat?
Fragment on uudelleenkäytettävä käyttöliittymämoduuli, joka sijaitsee Activityn sisällä. Voit ajatella sitä alitoimintona, jolla on oma asettelu, elinkaari ja logiikka.
Miksi Fragmentteja käytetään?
- Käyttöliittymän uudelleenkäyttö useissa Activityissä
- Eri asettelujen käsittely puhelimille ja tableteille
- Moninäyttöisten toimintoketjujen rakentaminen ilman useita Activityjä
- Luonteva yhteensopivuus Navigation Componentin kanssa
Fragmentin elinkaari
Fragmenteilla on oma elinkaarensa, joka kulkee Activityn elinkaaren rinnalla. Tärkeät callback-metodit ovat:
onAttach— Fragment liitetään ActivityynonCreate— Fragment luodaan (näkymää ei vielä ole)onCreateView— asettelu muunnetaan näkymäksionViewCreated— näkymä on valmis; määritä käyttöliittymä tässäonDestroyView— näkymä tuhotaan (tyhjennä näkymäviittaukset)onDetach— Fragment irrotetaan
Fragmentin luominen
Luo Fragment-luokasta periytyvä luokka ja ylikirjoita onCreateView asettelun muuntamiseksi näkymäksi:
import androidx.fragment.app.Fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
}
}ViewBinding Fragm enteissa
Käytä ViewBindingia Fragmenteissa, mutta vapauta sidonta onDestroyView-metodissa muistivuotojen välttämiseksi:
class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.tvTitle.text = "Welcome!"
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null // prevent memory leak
}
}Fragmentin asettelun XML
Luo res/layout/fragment_home.xml samalla tavalla kuin Activityn asettelu. Juurinäkymästä tulee Fragmentin näkymä:
<!-- res/layout/fragment_home.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="Home" />
</LinearLayout>Fragmentin lisääminen Activityyn
Fragmentin voi lisätä Activityyn kahdella tavalla:
- Staattisesti (XML) — määritä se asettelussa
<fragment>-tagilla. Kiinteä ajon aikana. - Dynaamisesti (koodilla) — käytä
FragmentManager-luokkaa ja transaktioita. Fragmentin voi vaihtaa ajon aikana.
<!-- Static: in activity_main.xml -->
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />Dynaamiset Fragment-transaktiot
Käytä supportFragmentManager-ominaisuutta Fragmenttien lisäämiseen, korvaamiseen tai poistamiseen ajon aikana:
// In Activity:
class MainActivity : AppCompatActivity(R.layout.activity_main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, HomeFragment())
.commit()
}
}
fun showDetail(id: Int) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, DetailFragment.newInstance(id))
.addToBackStack(null) // allow back navigation
.commit()
}
}Argumenttien välittäminen Fragmenteille
Välitä tietoja Bundle-olion avulla companion object -tehdasmallia käyttäen. Älä koskaan käytä parametreja sisältävää Fragment-konstruktoria – Android luo Fragmentit uudelleen parametrityhjiä konstruktoreita käyttäen määritysmuutosten jälkeen:
class DetailFragment : Fragment() {
companion object {
private const val ARG_ID = "item_id"
fun newInstance(itemId: Int): DetailFragment {
return DetailFragment().apply {
arguments = Bundle().apply {
putInt(ARG_ID, itemId)
}
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val itemId = requireArguments().getInt(ARG_ID)
// use itemId to load data
}
}Fragmentin ja Activityn välinen viestintä
Käytä Fragmentissa määritettyä interfacea, jonka Activity toteuttaa. Fragment saa siihen viitteen onAttach-metodissa:
class ListFragment : Fragment() {
interface OnItemSelected {
fun onItemSelected(id: Int)
}
private var listener: OnItemSelected? = null
override fun onAttach(context: Context) {
super.onAttach(context)
listener = context as? OnItemSelected
}
private fun handleClick(id: Int) {
listener?.onItemSelected(id)
}
override fun onDetach() {
super.onDetach()
listener = null
}
}Takaisinpino
Kun kutsut transaktiossa addToBackStack(null)-metodia, Takaisin-painikkeen painaminen poistaa Fragmentin pinosta:
- Ilman
addToBackStack-metodia Takaisin poistuu Activitystä addToBackStack-metodin kanssa Takaisin palaa edelliseen Fragmentiin- Käytä
popBackStack()-metodia ohjelmalliseen paluuseen
Fragment säilössä
Activityn asettelu tarvitsee vain säilönäkymän – yleensä tunnisteella varustetun FrameLayout-näkymän. Fragment täyttää tämän säilön:
<!-- activity_main.xml -->
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />Pikatarkistus
Miksi Fragmentille ei pitäisi koskaan välittää konstruktoriargumentteja, vaan käyttää companion factory -mallin kautta välitettyä Bundle-oliota?
Kertaus: Fragmentit
Fragmentit ovat modernien Android-käyttöliittymien rakennuspalikoita:
- Periytä
Fragment-luokasta ja muunna asettelu näkymäksionCreateView-metodissa - Määritä käyttöliittymä
onViewCreated-metodissa - Vapauta ViewBinding
onDestroyView-metodissa - Välitä tietoja
Bundle-olion ja companion factory -mallin avulla (newInstance) - Käytä
addToBackStack-metodia paluunavigointiin - Viestitä Activityn kanssa interfacen avulla
Seuraavaksi: pyydä vaarallisia käyttöoikeuksia ajon aikana.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”Fragmentit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Fragmentit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 7 oppituntia.
Mitä opin oppitunnilla ”Fragmentit”?
Rakentakaa modulaarisia käyttöliittymiä Fragmenteilla. Tutustukaa fragmentin elinkaareen, ViewBindingin käyttöön fragmenteissa, argumenttien välittämiseen, paluupinon hallintaan ja fragmentin sekä Ac… Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 6/7.
Kuinka kauan ”Fragmentit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Projektin rakenne ja manifesti
- Aktiviteetit ja elinkaari
- Asettelu ja näkymät
- Käyttäjän syötteen käsittely
- Intentit ja navigointi
- Fragmentit
- Käyttöoikeudet ja ajonaikaiset pyynnöt