Sobes.tech
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.