Fragment: vad är det, fragment och FragmentManager i Android

Författare: IT Sectr Publicerad: 2026-02-22 Lästid: 7 min

Fragment — en återanvändbar UI-komponent i Android som bäddas in i Activity och hanteras via FragmentManager. Varje fragment har en egen livscykel, layout och tillstånd. Fragment förenklar anpassning till olika skärmstorlekar och återanvändning av kod. Läs mer i Googles officiella guide.

Huvudpunkter

  • Fragment — UI-komponent inuti Activity med egen livscykel och layout
  • FragmentManager — klass för hantering av fragmenttransaktioner och bakåtstack
  • FragmentTransaction — atomär operation för att lägga till, ersätta eller ta bort fragment
  • Jetpack Fragment — bibliotek för bakåtkompatibilitet ända till Android 1.6 (API 4)
  • ViewModel — delad komponent för datautbyte mellan fragment i samma Activity

Vad är Fragment?

Fragment — en modulär komponent i Android-gränssnittet som representerar en del av skärmen inuti Activity. Fragment kan hantera sin egen layout, bearbeta livscykelhändelser och spara sitt tillstånd. Tack vare modularitet kan ett fragment användas i olika Activities och på olika enheter.

Fragment API introducerades i Android 3.0 (Honeycomb, API 11) år 2011 för stöd av surfplattor. Innan dess var utvecklare tvungna att skapa separata Activities för telefon och surfplatta. Fragment möjliggjorde att bygga skärmen från oberoende block. 2019 släppte Google Jetpack Fragment-biblioteket med bakåtkompatibilitet till API 4.

Enligt Google-data (2026) använder 80% av apparna i Google Play Fragment i någon form. Jetpack Fragment-biblioteket har laddats ner över 10 miljarder gånger via Google Play Services. Fragment förblir en nyckelkomponent i Android-arkitekturen även i Jetpack Compose-eran.

Fragment-livscykel

Livscykeln för Fragment är mer komplex än för Activity eftersom den beror på värd-Activityns tillstånd. Fragment går igenom samma tillstånd som Activity men lägger till egna callbacks: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Fragment callbackMotsvarar ActivitySyfte
onAttachföre onCreateFragment kopplat till Activity
onCreateonCreateInitiering av data som inte är UI-relaterade
onCreateViewonCreateSkapa layout via inflater
onViewCreatedonCreateBinda UI-element efter att view har skapats
onDestroyViewonDestroyTa bort view, frigöra UI-resurser
onDetachonDestroyFragment frånkopplat från Activity

Jämförelse av livscykel för Fragment och Activity

Huvudskillnaden i Fragment-livscykeln — anrop av onCreateView och onDestroyView mellan onCreate och onDestroy. Fragment kan existera utan UI (om onCreateView returnerar null). Efter återskapande av Activity återställer FragmentManager fragmenten automatiskt.

FragmentManager och transaktioner

FragmentManager — den centrala klassen för hantering av fragment i Activity. Den ansvarar för att lägga till, ta bort, ersätta fragment, hantera bakåtstacken och återställa tillstånd. FragmentManager är tillgänglig via supportFragmentManager (AndroidX) eller fragmentManager (gammalt API).

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Om fragmentet inte har lagts till än — skapar vi det
        if (savedInstanceState == null) {
            val transaction = this.supportFragmentManager
                .beginTransaction()
            transaction.add(R.id.fragment_container, ListFragment())
            transaction.addToBackStack(null)
            transaction.commit()
        }
    }

    fun replaceFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.fragment_container, fragment)
            .addToBackStack(null)
            .commit()
    }
}

Transaktioner i FragmentTransaction — är atomära. commit() schemalägger exekvering till nästa Looper-cykel. För omedelbar exekvering, använd commitNow(). addToBackStack(null) lägger till transaktionen i bakåtstacken — «Tillbaka»-knappen ångrar operationen.

Metoder för Fragment-livscykeln

Låt oss titta på nyckelmetoderna i Fragment-livscykeln med ett exempel i Kotlin. onCreateView skapar layouten — till skillnad från Activity måste metoden returnera View. onViewCreated anropas direkt efteråt, här är det säkert att hitta element efter id. onDestroyView — sista tillfället att rensa referenser till view.

kotlin
class DetailFragment : Fragment() {

    private var _binding: FragmentDetailBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentDetailBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.textTitle.setText("Detaljer")
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

View Binding-mönstret med _binding/binding garanterar att referensen till layout nollställs efter onDestroyView. Åtkomst till binding efter att view förstörts orsakar NullPointerException. Detta mönster rekommenderas av Google för alla fragment.

Dataöverföring mellan fragment

För dataöverföring mellan fragment erbjuder Android flera mekanismer. Den mest pålitliga — delad ViewModel, som delas mellan fragment i samma Activity. Fragment Result API passar för engångshändelser. Bundle-argument — för data när fragment skapas.

kotlin
// Delad ViewModel för två fragment
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

    fun select(item: Item) { _selectedItem.setValue(item) }
}

// Fragment A: skickar händelse via Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragment B: tar emot händelsen
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (tillagt i Fragment 1.3.0) ersätter föråldrade setTargetFragment/onActivityResult. API:t är typsäkert, använder Bundle och kräver inte kännedom om mottagaren. Parent FragmentManager fungerar som medlare mellan fragment.

Fragment vs Activity: när ska man välja vad

Valet mellan Fragment och Activity beror på applikationsarkitekturen. Fragment är obligatoriskt för adaptiva layouter (telefon + surfplatta), för anpassade övergångsanimationer och för användning av Jetpack Navigation. Activity är att föredra för enkla appar med en eller två skärmar.

KriteriumFragmentActivity
SkapandefartSnabbare (lätt komponent)Långsammare (systemprocess)
ÅteranvändningHög (ett fragment i olika Activities)Låg (varje skärm — egen Activity)
ÖvergångsanimationFlexibel (FragmentTransaction)Begränsad (overridePendingTransition)
Spara vid rotationAutomatiskt (hanteraren återställer)Manuellt (onSaveInstanceState)
Deep LinksVia Navigation ComponentNativt stöd via intent-filter

Jetpack Fragment och Jetpack Navigation

Det moderna sättet att arbeta med Fragment — Jetpack Navigation Component, som ersätter manuell hantering av FragmentManager. Biblioteket tillhandahåller NavGraph (XML-navigationsgraf), NavHostFragment och Safe Args för typsäker dataöverföring.

Jetpack Fragment-biblioteket (androidx.fragment:fragment-ktx) inkluderar FragmentResult API, DialogFragment, BottomSheetDialogFragment och integration med Lifecycle-aware komponenter. Från 2026 rekommenderar Google att använda Fragment endast via Jetpack Navigation, inte direkt.

xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@+id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name=".ListFragment"
        android:label="Lista">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name=".DetailFragment"
        android:label="Detaljer" />
</navigation>

Vanliga frågor

FragmentManager — vad är det?

FragmentManager — klass som hanterar fragmenttransaktioner. Den lägger till, tar bort, ersätter fragment i Activity-containern. FragmentManager återställer fragmentens tillstånd vid återskapande av Activity och hanterar bakåtstacken.

Vad skiljer Fragment från Activity?

Fragment — del av UI inuti Activity, kan inte existera självständigt. Fragment överlever återskapande av Activity vid skärmrotation. Activity — fullständig skärm med egen Lifecycle, Fragment beror på Activtiyns Lifecycle.

När ska man använda Fragment istället för Activity?

Fragment — när skärmen består av flera oberoende block (flikar, master-detail, anpassning för surfplatta). Activity — när skärmen inte har upprepande block. Google rekommenderar Single Activity + många Fragment.

Hur överför man data mellan Fragment?

Tre sätt: via förälder-Activity (delad ViewModel), via Fragment Result API (setFragmentResult), via Bundle-argument när Fragment skapas. ViewModel — föredraget sätt, eftersom data bevaras vid återskapande.

Vad är Fragment Transaction?

Fragment Transaction — atomär operation för att ändra uppsättningen fragment. FragmentManager.beginTransaction() öppnar en transaktion där add, remove, replace, hide, show kan anropas. Varje transaktion avslutas med commit() eller commitNow().

Sammanfattning

  • Fragment — återanvändbar UI-komponent inuti Activity med egen livscykel, layout och tillstånd
  • FragmentManager hanterar fragmenttransaktioner och återställer deras tillstånd vid återskapande av Activity
  • FragmentTransaction — atomär operation för att lägga till, ersätta, ta bort och dölja fragment
  • Fragment-livscykeln omfattar sex callbacks, från onAttach till onDetach, med extra punkt onCreateView
  • ViewModel — rekommenderat sätt för datautbyte mellan fragment i samma Activity
  • Fragment Result API ger typsäker överföring av engångshändelser mellan fragment

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också