Android Academy · Lektion

Fragments

Bygg modulära användargränssnitt med Fragments. Lär er fragmentets livscykel, ViewBinding i fragments, argumentöverföring, hantering av back stack och kommunikation mellan fragments och Activities.

Lektion 6 av 713 steg

Fragments är en gratis lektion i Android Academy på CoddyKit. Detta är lektion 6 av 7. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Android Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Android Academy innehåller totalt 7 lektioner.

Vad är Fragments?

En Fragment är en återanvändbar modul för användargränssnittet som finns inuti en Activity. Se den som en under-Activity med egen layout, livscykel och logik.

Varför använda Fragments?

  • Återanvänd användargränssnittet i flera Activities
  • Hantera olika layouter för telefoner och surfplattor
  • Bygg flöden med flera skärmar utan flera Activities
  • Arbeta naturligt med Navigation Component

Fragments livscykel

Fragments har en egen livscykel som körs parallellt med Activity-livscykeln. Viktiga callback-metoder:

  • onAttach – fragmentet kopplas till en Activity
  • onCreate – fragmentet skapas (ingen vy ännu)
  • onCreateView – blåser upp layouten
  • onViewCreated – vyn är klar, konfigurera användargränssnittet här
  • onDestroyView – vyn förstörs (rensa vyreferenser)
  • onDetach – fragmentet kopplas från

Skapa ett Fragment

Skapa en klass som ärver från Fragment och åsidosätt onCreateView för att blåsa upp layouten:

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 i Fragments

Använd ViewBinding i fragments – men frigör bindingen i onDestroyView för att undvika minnesläckor:

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

XML-layout för Fragment

Skapa res/layout/fragment_home.xml på samma sätt som en Activity-layout. Rotvyn blir fragmentets vy:

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

Lägga till ett Fragment i en Activity

Det finns två sätt att lägga till ett Fragment i en Activity:

  • Statiskt (XML) – deklarera det i layouten med taggen <fragment>. Fast under körning.
  • Dynamiskt (kod) – använd FragmentManager och transaktioner. Kan bytas ut under körning.
<!-- 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" />

Dynamiska Fragment-transaktioner

Använd supportFragmentManager för att lägga till, ersätta eller ta bort fragments under körning:

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

Skicka argument till Fragments

Skicka data via en Bundle med fabriksmönstret för companion object. Använd aldrig en Fragment-konstruktor med parametrar – Android återskapar fragments med en konstruktor utan argument efter konfigurationsändringar:

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

Kommunikation mellan Fragment och Activity

Använd ett interface som definieras i Fragmentet och implementeras av Activityn. Fragmentet får en referens via onAttach:

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

Bakåtstack

När du anropar addToBackStack(null) i en transaktion tar ett tryck på Tillbaka bort fragmentet från stacken:

  • Utan addToBackStack – Tillbaka avslutar Activityn
  • Med addToBackStack – Tillbaka återgår till det föregående fragmentet
  • Använd popBackStack() programmatiskt för att navigera tillbaka

Fragment i en behållare

Activity-layouten behöver bara en vy som behållare – vanligtvis en FrameLayout med ett ID. Fragmentet fyller behållaren:

<!-- activity_main.xml -->
<FrameLayout
    android:id="@+id/fragmentContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Snabbkontroll

Varför bör du aldrig skicka konstruktorargument till ett Fragment, utan i stället använda en Bundle via en companion factory?

Sammanfattning: Fragments

Fragments är byggstenarna i moderna Android-användargränssnitt:

  • Ärv från Fragment och blås upp layouten i onCreateView
  • Konfigurera användargränssnittet i onViewCreated
  • Frigör ViewBinding i onDestroyView
  • Skicka data via Bundle + companion factory (newInstance)
  • Använd addToBackStack för bakåtnavigering
  • Kommunicera med Activity via ett interface

Nästa steg: begär känsliga behörigheter under körning.

Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
36
Lektioner
152

Vanliga frågor

Är lektionen ”Fragments” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Android Academy, inklusive ”Fragments”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Android Academy innehåller totalt 7 lektioner.

Vad lär jag mig i ”Fragments”?

Bygg modulära användargränssnitt med Fragments. Lär er fragmentets livscykel, ViewBinding i fragments, argumentöverföring, hantering av back stack och kommunikation mellan fragments och Activities. Ni övar på Android Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Android Academy?

Du behöver inga förkunskaper. Utbildningen i Android Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 6 av 7.

Hur lång tid tar lektionen ”Fragments”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Android Academy-lektionen?

Ja. Varje Android Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Projektstruktur och manifest
  2. Aktiviteter och livscykel
  3. Layouter och vyer
  4. Hantera användarinmatning
  5. Intents och navigering
  6. Fragments
  7. Behörigheter och begäranden under körning
← Tillbaka till Android Academy