kotlin中Fragment的切换

f'rgment是依附于activity或其他的fragment存在的,其复用性很高,而且fragment的视图层次是附加到宿主视图结构上的。一般一个activity上会有多个fragment依附于它,所以这就涉及到了fragment之间的切换。

一、自定义切换

1、首先在activity中添加一个FragmentContainerView容器(静态添加),然后选择首先依附的fragment是哪一个,具体代码如下:

 <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragmentContainerView"
        android:name="com.example.myreviewlogin.fragments.PinLoginFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

2、然后在buildgrable中添加依赖库:

    implementation ("androidx.fragment:fragment-ktx:1.6.0")

3、在fragment内部运用

通过parentFragmentManager(得到fragment的父容器)来管理fragment的视图的动画效果,切换以及是否加入栈中

使用transaction切换:

val transaction = parentFragmentManager.beginTransaction()//在父容器里面所以要用这个
transaction.replace(R.id.fragmentContainerView,DetailFragment())//切换fragment
//transaction.add(R.id.fragmentContainerView,DetailFragment())动态添加fragment
transaction.addToBackStack(null)//需要回退的就加入栈
transaction.setReorderingAllowed(true)
transaction.commit()//commitNow和addToBackStack是冲突的

这里我们可以使用parentFragmentManager中commit函数管理更加方便

添加依赖:

implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")

parentFragmentManager.commit {
    replace(R.id.fragmentContainerView, DetailFragment())
    addToBackStack(null)
    setReorderingAllowed(true)
}

注意事项:

1、进行事务操作后要进行commit否则不会生效

2、如果同时多个添加了add()或remove(),并且调用了addToBackStack(),则会在调用commit前,会将其当作单一事务添加到返回栈中,并且返回按钮会将他们都撤销

3、commit后并不会立即执行,而是activity的UI线程可以执行该操作时安排在其他线程执行,commitNow()就是立即执行

4、每一个片段事务可以通过动画来过度比如说setTransition()

除此之外还可以使用navigation导航栏切换 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值