Fragment的基础认知和基本使用

由于Activity是重量级控件,Google在Android 3.0的时候引入了Fragment,Fragment被翻译为“碎片”,相当于是被拆分了的Activity,他们作用相似,都可以用来做界面的内容显示;但是,Fragment是依托在Activity而存在的,不能独立存在。为了更好的支持低版本的Android系统,Google在后期推出了Support.V4包,它的出现将Fragment的支持版本降低到了1.6。

Fragment的生命周期

  • Fragment从创建到运行的过程中所经历的生命周期

    1. onAttach(Activity):当Fragment与Activity相关联的时候该方法被调用,且仅被调用一次;(通常在此处获取相关联的Activity
    2. onCreate(Bundle) :当Fragment初始化创建时该方法会被调用;
    3. onCreateView(LayoutInflater, ViewGroup, Bundle):创建并返回与Fragment相关的View;
    4. onActivityCreated(Bundle):当与其相关联的Activity的onCreate()方法完成后,该方法将会被调用;
    5. onViewStateRestored(Bundle):通知Fragment所有保存的状态都已经恢复;
    6. onStart():此时Fragment可见,但不可交互;(和Activity的onStart()方法作用相同)
    7. onResume():此时Fragment可见,可交互;(和Activity的onResume()方法作用相同)
  • Fragment从暂停到销毁的过程中所经历的生命周期

    1. onPause():此时Fragment处于暂停状态,用户不能与之交互;
    2. onStop() :此时Fragment处于停止状态,并且不可见;
    3. onDestroyView():允许Fragment清除相关联的View中的资源;
    4. onDestroy():清除Fragment的状态;
    5. onDetach():当Acitivity与Fragment解除关联时,该方法立刻被调用;
  • 放上一张Activity与Fragment的启动顺序测试日志图
    这里写图片描述
    由上图我们可以发现,Fragment的生命周期与Activity的生命周期确实是相关联的,并且还有对应关系。
    1. Activity的onCreate()方法执行过程中Fragment会执行以下方法
      • onAttach()
      • onCreate()
      • onCreateView()
      • onActivityCreated()
    2. Activity的onDestroy()方法执行过程中Fragment会执行以下方法
      • onDestroyView()
      • onDestroy()
      • onDetach()

创建Fragment的两种方式

  • 静态创建
    在布局xml文件中使用引入创建好的Fragment

    <FrameLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" 
        android:layout_height="match_parent">
            <fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
            android:id="@+id/titles"
            android:layout_width="match_parent" android:layout_height="match_parent" />
    </FrameLayout>

    **注意:**Fragment的onCreateView()方法中必须创建View,否则会出现Caused by: java.lang.IllegalStateException: Fragment xxx.xxx.xxxx did not create a view.

  • 动态创建
    静态创建Fragment未免太过受限制,毕竟一旦在xml中设置后,就不能轻易的改变。谷歌为Fragment提供了两个类用于Fragment的动态创建。

    • FragmentManager:主要用于在Activity中操作Fragment
    • FragmentTransaction:提供了很多对Fragment的操作方法

创建Framgment

public class ContentFragment extends Fragment {

    public static ContentFragment newInstance() {
        return new ContentFragment();
    }

    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_content, container, false);

        return view;
    }
 }

向Activity中添加Fragment的核心代码

public void addFragment(Fragment fragment) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fl_container, fragment, TAG)
                .commit();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值