Android Fragments新功能

在刚刚过去Android Dev Summit 2019中,提到很多项目,如依旧大力推广的Kotlin,还有Jetpack Compose,CameraX,Room等新功能。其中也提到了android fragments,发布了androidx.fragment-1.2.0-rc01。

fragment一直是开发中非常常用的工具,在以前的版本中由于生命周期的问题一直被诟病,虽然现在已经经过很多优化,依旧会出现些许问题。但google也一直在持续的优化,自从androidx推出之后,fragment独立为一个library,就是androidx.fragment。

使用androidx.fragment首先需要迁移到androidx,可以参考官方文档(https://developer.android.com/jetpack/androidx/migrate?hl=zh-cn)进行迁移。在刚刚发布的androidx.fragments库中,有一些新的功能变化。

FragmentContainerView

在以前的版本中,经常使用FrameLayout来进行加载Fragment,而FragmentContainerView就是继承自FrameLayout,它可以可靠的处理Fragment,有更好的协调功能,可以更好的管理fragment加载时的动画效果。

使用方法和FrameLayout相同

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

当然也可以代替fragment标签,它有两个自定义属性,name和tag,name表示会创建一个fragment,而设置了tag表示可以用findFragmentByTag来查找你的fragment,使用方法如下

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.MyFragment"
        android:tag="my_tag" />

但是需要注意的是不要用它来替换其他布局,如LinearLayout。

FragmentFactory

通常创建fragment时都是无参构造方法,而FragmentFactory改变了这一点,可以在新建fragment时就传入参数,不用再手动添加了

getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.container, MyFragment.class, new Bundle());

其次,可以自定义Factory方法,当创建fragment时,可以根据需要创建自定义的Fragment

public class MyFactory extends FragmentFactory {

    @NonNull
    @Override
    public Fragment instantiate(@NonNull ClassLoader classLoader, @NonNull String className) {
           ……
    }
}

androidx.fragment的新版本有这些可喜的变化,值得尝试。使用方式如下

implementation 'androidx.fragment:fragment:1.2.0-rc01'
// 如果使用kotlin
implementation 'androidx.fragment:fragment-ktx:1.2.0-rc01'
发布了53 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/jklwan/article/details/102810238