Fragment的使用(七)-FragmentTransaction
作者:互联网
文章目录
一、前言
在Fragment
的实际操作中其实并不是使用Fragment
来进行操作的,而是通过使用FragmentTransaction
进行操作的。比如add、replace、remove等等。
二、FragmentTransaction
通常使用FragmentManager
来获取FragmentTransaction
。如下:
val fragmentManager = ...
val fragmentTransaction = fragmentManager.beginTransaction()
操作完成之后通常使用commit()
进行提交
三、常用api
commit()
和commitNow()
调用
commit()
不会立即执行事务。相反,事务被安排在主 UI 线程上运行,只要它能够这样做。但是,如有必要,您可以调用commitNow()
以立即在您的 UI 线程上运行片段事务。请注意,
commitNow
与addToBackStack
. 或者,您可以通过 调用执行所有尚未运行的调用FragmentTransactions
提交的 挂起。这种方法与.commit()
executePendingTransactions()
addToBackStack
对于绝大多数用例,
commit()
这就是您所需要的。
add()
、replace()
、remove()
本篇只记录replace()
的示例,其它方式类似
// Create new fragment
val fragmentManager = // ...
// Create and commit a new transaction
fragmentManager.commit {
setReorderingAllowed(true)
// Replace whatever is in the fragment_container view with this fragment
replace<ExampleFragment>(R.id.fragment_container)
}
hide()
、show()
通过调用该函数可以对Fragment
进行显示和隐藏操作
class CallBackFragment : Fragment(){
...
parentFragmentManager.beginTransaction().show(this)
parentFragmentManager.beginTransaction().hide(this)
...
}
addToBackStack()
、popBackStack()
这两个函数是将Fragment
添加到返回栈中,以及弹出返回栈到意思
当您对事务调用
addToBackStack()
时,请注意,事务可以包括任意数量的操作,如添加多个 Fragment、替换多个容器中的 Fragment,等等。弹出返回堆栈时,所有这些操作会作为一项原子化操作反转。如果您在调用popBackStack()
之前提交了其他事务,并且您没有对事务使用addToBackStack()
,则这些操作不会反转。因此,在一个FragmentTransaction
中,应避免让影响返回堆栈的事务与不影响返回堆栈的事务交织在一起。
setMaxLifecycle()
FragmentTransactions会影响事务范围内添加的各个片段的生命周期状态。创建FragmentTransaction时,setMaxLifecycle()为给定片段设置最大状态。例如,ViewPager2使用setMaxLifecycle()将屏幕外片段限制为启动状态。
setReorderingAllowed()
为了行为兼容性,默认情况下不启用重新排序标志。但是,它需要允许
FragmentManager
正确执行您的FragmentTransaction
,特别是当它在后台堆栈上运行并运行动画和过渡时。启用该标志可确保如果多个事务一起执行,任何中间片段(即添加然后立即替换的片段)不会经历生命周期更改或执行其动画或转换。请注意,此标志会影响事务的初始执行和使用 撤销事务popBackStack()
。
四、setPrimaryNavigationFragment
在给定的时间,只
FragmentManager
返回一个控制Fragment。如果应用在屏幕上允许显示多个同级Fragment,或者应用使用子Fragment,则必须指定一个FragmentManager
来处理应用的主要导航。在事务内部定义该片段的调用
setPrimaryNavigationFragment()
方法,并控制一个片段的实例,并控制一个片段的主要事务childFragmentManager
。将导航作为最重要的层外层,其中的活动作为最主要的外层结构,下面有一个片段。每一层都具有一个层级的导航片段。最内层再也没有可以从弹回的片段事务,控制权持续到这个阶段的下层,一直重复,一直到达其活动。
请注意两个或更多 Fragment,同时只有一个可以是主要导航 Fragment。如果将 Fragment 设置成导航 Fragment,会移除对先前 Fragment 的指定。在上例中,您如果显示将详情fragment设为主要导航fragment,移除对fragment的指定。
四、参考链接
标签:片段,Fragment,事务,fragment,使用,commit,FragmentTransaction 来源: https://blog.csdn.net/Mr_Tony/article/details/122501579