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.
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 ActivityonCreate– fragmentet skapas (ingen vy ännu)onCreateView– blåser upp layoutenonViewCreated– vyn är klar, konfigurera användargränssnittet häronDestroyView– 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
FragmentManageroch 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
Fragmentoch blås upp layouten ionCreateView - Konfigurera användargränssnittet i
onViewCreated - Frigör ViewBinding i
onDestroyView - Skicka data via
Bundle+ companion factory (newInstance) - Använd
addToBackStackför bakåtnavigering - Kommunicera med Activity via ett interface
Nästa steg: begär känsliga behörigheter under körning.
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
- Projektstruktur och manifest
- Aktiviteter och livscykel
- Layouter och vyer
- Hantera användarinmatning
- Intents och navigering
- Fragments
- Behörigheter och begäranden under körning