美文网首页
Android学习——fragment

Android学习——fragment

作者: 鱼嘿蛮仁 | 来源:发表于2024-03-13 17:20 被阅读0次

    一、概述

    Fragment碎片,是一种可以嵌入在 Activity 中的 UI 片段。
    1、和其它 view 不同,Fragment 具备生命周期

    (1) 可在一个Activity中组合使用多个Fragment,从而构成多窗格的界面。

    (2) 可在多个Activity中重复使用一个Fragment。

    2、必须委托在 Activity 中才能运行(必须有宿主Activity)

    当一个Activity暂停/销毁时,它里面的Fragment也会暂停/销毁;当一个Activity运行时,它里面的Fragment可以独立操作。

    二、生命周期

    22faa026d6fb105282478de26dcd167a.png
    1. onAttach(Contextcontext):在 Fragment 和 Activity 关联上的时候调用,且仅调用一次。在该回调中我们可以将 context 转化为 Activity 保存下来,从而避免后期频繁调用getAtivity() 获取 Activity 的局面,避免了在某些情况下 getAtivity() 为空的异常(Activity和 Fragment 分离的情况下)。同时也可以在该回调中将传入的Arguments提取并解析,在这里强烈推荐通过setArguments给Fragment传参数,因为在应用被系统回收时Fragment不会保存相关属性。
    2. onCreate():在最初创建Fragment的时候会调用,和Activity的onCreate类似。
    3. onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState):在准备绘制Fragment界面时调用,返回值为Fragment要绘制布局的根视图,当然也可以返回null。注意使用inflater构建View时一定要将attachToRoot指明false,因为Fragment会自动将视图添加到container中,attachToRoot为true会重复添加报错。onCreateView并不是一定会被调用,当添加的是没有界面的Fragment就不会调用,比如调用FragmentTransaction的add(Fragment fragment, String tag)方法。
    4. onActivityCreated: 在 Activity 的 onCreated 执行完时会调用。
    5. onStart():Fragment对用户可见的时候调用,前提是 Activity 已经 started。
    6. onResume():Fragment和用户可交互时会调用,前提是Activity已经resumed。
    7. onPause():Fragment和用户不可交互时会调用。
    8. onStop():Fragment不可见时会调用。
    9. onDestroyView():销毁该Fragment所包含的View时被调用。
    10. onDestroy():销毁该Fragment时调用。
    11. onDetach():Fragment和Activity解除关联时调用。

    三、使用

    1、创建类继承Fragment实现onCreateView方法。

    /**
     * LayoutInflater 详情参考:https://blog.csdn.net/u012702547/article/details/52628453
     * */
    public class BlankFragment extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            /**
             * 参数:
             * 1、R.layout.fragment_blank 自定义布局的资源id
             *
             * 2、container 将作为自定义布局的父ViewGroup。是否将自定义布局添加到 container(由第三个参数的boolean值决定)
             *
             * 3、boolean值
             *
             * */
            return inflater.inflate(R.layout.fragment_blank, container, false);
        }
    
    }
    

    2、在layout文件夹下建fragment_blank.xml布局文件,并在第一步中引入布局。

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".BlankFragment">
    
        <!-- TODO: Update blank fragment layout -->
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/hello_blank_fragment" />
    
    </FrameLayout>
    

    方法一:静态使用:activity的xml布局中引入即可。(注意:必须要设置android:id属性,否则程序会出错)

    <fragment
            android:id="@+id/frag_blank"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:name="com.example.myapplication.BlankFragment"/>
    

    方法二:动态使用:通过FragmentManager、FragmentTransaction来进行动态添加、替换、移除、fragment从相应的容器中。

    (1)在Activity的XML布局文件中创建一个带id的布局管理器,用于动态创建Fragment时容纳Fragment

    <FrameLayout
            android:id="@+id/fl_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    

    (2)在Activity里动态创建Fragment

            //获得FragmentManager对象
            FragmentManager fragmentManager = getSupportFragmentManager();
            // 通过FragmentManager对象获得FragmentTransaction对象(开启事务)
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    
            fragmentTransaction.add(R.id.fl_layout, new BlankFragment());//动态添加
            fragmentTransaction.commit();//提交
    

    相关文章

      网友评论

          本文标题:Android学习——fragment

          本文链接:https://www.haomeiwen.com/subject/abpmzdtx.html