Fragment: ano ito, mga fragment at FragmentManager sa Android

May-akda: IT Sectr Nai-publish: 2026-02-22 Oras ng pagbabasa: 7 min

Fragment — isang reusable na UI component sa Android na naka-embed sa Activity at pinamamahalaan sa pamamagitan ng FragmentManager. Ang bawat fragment ay may sariling lifecycle, layout at estado. Pinapadali ng Fragment ang pag-adapt sa iba't ibang laki ng screen at muling paggamit ng code. Magbasa nang higit pa sa opisyal na gabay ng Google.

Mga pangunahing punto

  • Fragment — UI component sa loob ng Activity na may sariling lifecycle at layout
  • FragmentManager — klase para sa pamamahala ng mga transaksyon ng fragment at back stack
  • FragmentTransaction — atomikong operasyon ng pagdaragdag, pagpapalit o pagtanggal ng mga fragment
  • Jetpack Fragment — library para sa backward compatibility hanggang Android 1.6 (API 4)
  • ViewModel — shared component para sa pagpapalitan ng data sa pagitan ng mga fragment sa iisang Activity

Ano ang Fragment?

Fragment — isang modular na bahagi ng Android user interface na kumakatawan sa bahagi ng screen sa loob ng Activity. Maaaring pamahalaan ng Fragment ang sarili nitong layout, iproseso ang mga kaganapan sa lifecycle, at i-save ang estado nito. Dahil sa modularity, ang isang fragment ay maaaring gamitin sa iba't ibang Activity at sa iba't ibang device.

Lumitaw ang Fragment API sa Android 3.0 (Honeycomb, API 11) noong 2011 para suportahan ang mga tablet. Bago nito, ang mga developer ay kailangang gumawa ng hiwalay na Activity para sa telepono at tablet. Pinahintulutan ng Fragment ang pagbuo ng screen mula sa mga independiyenteng bloke. Noong 2019, inilabas ng Google ang Jetpack Fragment library na may backward compatibility hanggang API 4.

Ayon sa data ng Google (2026), 80% ng mga app sa Google Play ay gumagamit ng Fragment sa isang anyo o iba pa. Ang Jetpack Fragment library ay na-download nang higit sa 10 bilyong beses sa pamamagitan ng Google Play Services. Ang Fragment ay nananatiling pangunahing bahagi ng arkitektura ng Android kahit sa panahon ng Jetpack Compose.

Lifecycle ng Fragment

Ang lifecycle ng Fragment ay mas kumplikado kaysa sa Activity, dahil depende ito sa estado ng host Activity. Ang Fragment ay dumadaan sa parehong mga estado tulad ng Activity, ngunit nagdaragdag ng sarili nitong mga callback: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Callback ng FragmentKatumbas sa ActivityLayunin
onAttachbago ang onCreateFragment naka-attach sa Activity
onCreateonCreatePagsisimula ng data na hindi nauugnay sa UI
onCreateViewonCreatePaglikha ng layout sa pamamagitan ng inflater
onViewCreatedonCreatePagbubuklod ng mga elemento ng UI pagkatapos gawin ang view
onDestroyViewonDestroyPag-alis ng view, pagpapalaya ng mga UI resource
onDetachonDestroyFragment na-detach mula sa Activity

Paghahambing ng lifecycle ng Fragment at Activity

Ang pangunahing pagkakaiba ng lifecycle ng Fragment — pagtawag sa onCreateView at onDestroyView sa pagitan ng onCreate at onDestroy. Maaaring umiral ang Fragment nang walang UI (kung ang onCreateView ay nagbabalik ng null). Pagkatapos ng muling paggawa ng Activity, awtomatikong ibinabalik ng FragmentManager ang mga fragment.

FragmentManager at mga transaksyon

FragmentManager — ang sentral na klase para sa pamamahala ng mga fragment sa Activity. Responsable ito sa pagdaragdag, pagtanggal, pagpapalit ng mga fragment, pamamahala ng back stack at pagpapanumbalik ng estado. Ang FragmentManager ay maa-access sa pamamagitan ng supportFragmentManager (AndroidX) o fragmentManager (lumang API).

kotlin
class MainActivity : AppCompatActivity() {

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

        // Kung ang fragment ay hindi pa naidaragdag — ginagawa natin
        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()
    }
}

Ang mga transaksyon ng FragmentTransaction — ay atomiko. Ang commit() ay nag-iiskedyul ng pagpapatupad para sa susunod na Looper cycle. Para sa agarang pagpapatupad, gamitin ang commitNow(). Ang addToBackStack(null) ay nagdaragdag ng transaksyon sa back stack — ang button na «Bumalik» ay magkakansela ng operasyon.

Mga pamamaraan ng lifecycle ng Fragment

Tingnan natin ang mga pangunahing pamamaraan ng lifecycle ng Fragment na may halimbawa sa Kotlin. Ang onCreateView ay lumilikha ng layout — hindi tulad ng Activity, ang pamamaraan ay dapat magbalik ng View. Ang onViewCreated ay tinatawag kaagad pagkatapos, dito ligtas na maghanap ng mga elemento ayon sa id. Ang onDestroyView — huling sandali para linisin ang mga reference sa 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("Mga Detalye")
    }

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

Ang pattern ng View Binding na may _binding/binding ay ginagarantiyahan na pagkatapos ng onDestroyView ang reference sa layout ay nino-null. Ang pag-access sa binding pagkatapos ng pagkasira ng view ay magdudulot ng NullPointerException. Ang pattern na ito ay inirerekomenda ng Google para sa lahat ng fragment.

Paglipat ng data sa pagitan ng mga fragment

Para sa paglipat ng data sa pagitan ng mga fragment, nag-aalok ang Android ng ilang mekanismo. Ang pinaka-maaasahan — shared ViewModel, na ibinabahagi sa pagitan ng mga fragment ng iisang Activity. Ang Fragment Result API ay angkop para sa isang beses na mga kaganapan. Ang mga argumento ng Bundle — para sa data kapag gumagawa ng fragment.

kotlin
// Shared ViewModel para sa dalawang fragment
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

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

// Fragment A: nagpapadala ng event sa pamamagitan ng Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragment B: tumatanggap ng event
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Ang Fragment Result API (idinagdag sa Fragment 1.3.0) ay pumapalit sa mga lumang setTargetFragment/onActivityResult. Ang API ay type-safe, gumagamit ng Bundle, at hindi nangangailangan ng kaalaman tungkol sa tatanggap. Ang Parent FragmentManager ay nagsisilbing tagapamagitan sa pagitan ng mga fragment.

Fragment vs Activity: kailan ano ang pipiliin

Ang pagpili sa pagitan ng Fragment at Activity ay depende sa arkitektura ng application. Ang Fragment ay sapilitan para sa adaptive layouts (telepono + tablet), para sa custom transition animation at para sa paggamit ng Jetpack Navigation. Ang Activity ay mas gusto para sa mga simpleng app na may isa-dalawang screen.

PamantayanFragmentActivity
Bilis ng paggawaMas mabilis (magaan na bahagi)Mas mabagal (sistemang proseso)
Muling paggamitMataas (isang fragment sa iba't ibang Activity)Mababa (bawat screen — sariling Activity)
Animasyon ng transitionFlexible (FragmentTransaction)Limitado (overridePendingTransition)
Pag-save sa pag-ikotAwtomatiko (manager ang nagpapanumbalik)Manwal (onSaveInstanceState)
Deep LinksSa pamamagitan ng Navigation ComponentNative support sa pamamagitan ng intent-filter

Jetpack Fragment at Jetpack Navigation

Ang modernong diskarte sa pagtatrabaho sa Fragment — Jetpack Navigation Component, na pumapalit sa manu-manong pamamahala ng FragmentManager. Nagbibigay ang library ng NavGraph (XML navigation graph), NavHostFragment at Safe Args para sa type-safe na paglipat ng data.

Jetpack Fragment library (androidx.fragment:fragment-ktx) ay may kasamang FragmentResult API, DialogFragment, BottomSheetDialogFragment at integrasyon sa mga Lifecycle-aware na bahagi. Mula noong 2026, inirerekomenda ng Google ang paggamit ng Fragment lamang sa pamamagitan ng Jetpack Navigation, hindi direkta.

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="Listahan">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

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

Mga madalas itanong

FragmentManager — ano ito?

FragmentManager — klase na namamahala sa mga transaksyon ng fragment. Nagdaragdag, nagtatanggal, nagpapalit ng mga fragment sa container ng Activity. Ibinabalik ng FragmentManager ang estado ng mga fragment kapag muling ginawa ang Activity at pinamamahalaan ang back stack.

Paano naiiba ang Fragment sa Activity?

Fragment — bahagi ng UI sa loob ng Activity, hindi maaaring umiral nang mag-isa. Nabubuhay ang Fragment sa muling paggawa ng Activity kapag umiikot ang screen. Ang Activity — buong screen na may sariling Lifecycle, ang Fragment ay nakadepende sa Lifecycle ng Activity.

Kailan gagamitin ang Fragment sa halip na Activity?

Fragment — kapag ang screen ay binubuo ng ilang independiyenteng bloke (tab, master-detail, adaptasyon para sa tablet). Activity — kapag ang screen ay walang paulit-ulit na bloke. Inirerekomenda ng Google ang Single Activity + maraming Fragment.

Paano maglipat ng data sa pagitan ng Fragment?

Tatlong paraan: sa pamamagitan ng parent Activity (shared ViewModel), sa pamamagitan ng Fragment Result API (setFragmentResult), sa pamamagitan ng Bundle argument kapag gumagawa ng Fragment. ViewModel — ang gustong paraan, dahil nananatili ang data sa muling paggawa.

Ano ang Fragment Transaction?

Fragment Transaction — atomikong operasyon ng pagbabago ng set ng mga fragment. Ang FragmentManager.beginTransaction() ay nagbubukas ng transaksyon kung saan maaaring tawagan ang add, remove, replace, hide, show. Ang bawat transaksyon ay nagtatapos sa commit() o commitNow().

Buod

  • Fragment — reusable na UI component sa loob ng Activity na may sariling lifecycle, layout at estado
  • FragmentManager namamahala ng mga transaksyon ng fragment at ibinabalik ang kanilang estado kapag muling ginawa ang Activity
  • FragmentTransaction — atomikong operasyon para sa pagdaragdag, pagpapalit, pagtanggal at pagtatago ng mga fragment
  • Lifecycle ng Fragment ay may anim na callback, mula onAttach hanggang onDetach, na may karagdagang puntong onCreateView
  • ViewModel — inirerekomendang paraan ng pagpapalitan ng data sa pagitan ng mga fragment sa iisang Activity
  • Fragment Result API ay nagbibigay ng type-safe na paglipat ng isang beses na kaganapan sa pagitan ng mga fragment

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din