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 — 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.
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 Fragment | Katumbas sa Activity | Layunin |
|---|---|---|
| onAttach | bago ang onCreate | Fragment naka-attach sa Activity |
| onCreate | onCreate | Pagsisimula ng data na hindi nauugnay sa UI |
| onCreateView | onCreate | Paglikha ng layout sa pamamagitan ng inflater |
| onViewCreated | onCreate | Pagbubuklod ng mga elemento ng UI pagkatapos gawin ang view |
| onDestroyView | onDestroy | Pag-alis ng view, pagpapalaya ng mga UI resource |
| onDetach | onDestroy | Fragment na-detach mula sa 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 — 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).
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.
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.
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.
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.
// 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.
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.
| Pamantayan | Fragment | Activity |
|---|---|---|
| Bilis ng paggawa | Mas mabilis (magaan na bahagi) | Mas mabagal (sistemang proseso) |
| Muling paggamit | Mataas (isang fragment sa iba't ibang Activity) | Mababa (bawat screen — sariling Activity) |
| Animasyon ng transition | Flexible (FragmentTransaction) | Limitado (overridePendingTransition) |
| Pag-save sa pag-ikot | Awtomatiko (manager ang nagpapanumbalik) | Manwal (onSaveInstanceState) |
| Deep Links | Sa pamamagitan ng Navigation Component | Native support sa pamamagitan ng intent-filter |
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.
<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 — 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.
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.
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.
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.
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
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.
Basahin din