Junior
Чӣ гуна метавон қисмҳоро дар Activity амалӣ кард?
sobes.tech AI
Ҷавоб аз AI
Дар Activity, метавон фрагментҳоро ба таври декларативӣ дар XML ё ба таври барномавӣ бо ёрии FragmentManager иҷро кард.
Декларативӣ (дар XML):
<fragment
android:id="@+id/my_fragment"
android:name="com.example.MyFragment" // Номи пурраи синфи фрагмент
android:layout_width="match_parent"
android:layout_height="match_parent" />
- Фрагмент ҳангоми сохтани Activity илова мешавад.
- Барои нақшаҳои статикӣ осон истифода мешавад.
- Барои амалиётҳои динамикӣ камтар флексибл аст.
Барномавӣ (бо ёрии FragmentManager):
// Дар дохили усули Activity, масалан, onCreate ё ҳангоми рӯйдод
val fragmentManager = supportFragmentManager // Барои AppCompatActivity
val fragmentTransaction = fragmentManager.beginTransaction()
// Илова кардани фрагмент
val myFragment = MyFragment()
fragmentTransaction.add(R.id.fragment_container, myFragment)
// Ҷойгузорӣ кардани фрагмент (мебарад фрагменти мавҷударо дар контейнер ва илова мекунад нав)
// val newFragment = NewFragment()
// fragmentTransaction.replace(R.id.fragment_container, newFragment)
// Ҳамроҳ кардани фрагмент
// val fragmentToRemove = fragmentManager.findFragmentById(R.id.fragment_container)
// агар (fragmentToRemove != null) {
// fragmentTransaction.remove(fragmentToRemove)
// }
// Илова ба Back Stack (имкон медиҳад, ки корбар ба фрагменти қаблӣ баргардад бо тугмаи "Гузариш")
fragmentTransaction.addToBackStack(null) // Рамзи теги барои бэкстек (мумкин аст null)
// Тамом кардани транзаксия
fragmentTransaction.commit() // Иҷрои асинхронӣ
// ё
// fragmentTransaction.commitNow() // Иҷрои синхронӣ
- Бо ёрии
FragmentManagerбарои идоракунии фрагментҳо истифода мешавад. FragmentTransactionбарои иҷрои амалиётҳо (илова кардан, хориҷ кардан, ҷойгузорӣ ва ғайра) истифода мешавад.- Фароҳам меорад флексибилитети бештар барои тағироти динамикии UI дар вақти иҷро.
- Мебарояд бэкстекро идора кард барои навигатсия.
Истифодаи контейнер:
Барои илова кардан ё ҷойгузории фрагментҳо ба таври барномавӣ, одатан, контейнер дар XML-ро истифода мебаранд, масалан, FrameLayout ё LinearLayout:
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Пас дар коди Activity, фрагмент дар дохили ин контейнер илова ё ҷойгузорӣ мешавад.
Масъалаҳои муҳим:
- Давраи ҳаёти фрагмент бо давраи ҳаёти Activity сахт пайваст аст.
- Fragment Manager давраи ҳаёти ва ҳолати фрагментҳоро идора мекунад.
- Трансаксияи фрагмент ба таври атомӣ иҷро мешавад (ё тамоми амал, ё ягон чиз).
- Вақте ки истифодаи бэкстек, бояд
addToBackStack()даъват кард. - Барои кор бо фрагментҳо дар AppCompatActivity, истифодаи
supportFragmentManager.