Android Fragment 详解(未完...)

本文详细介绍了Android中的Fragment,包括Fragment的用途、创建方式(静态与动态)、重要方法如FragmentManager和FragmentTransaction,以及Fragment的生命周期。通过实例演示了如何在Activity中添加和管理Fragment,特别强调了new Fragment与newInstance()的区别。此外,还探讨了Fragment在不同场景下的生命周期变化,并提供了日志监测生命周期的方法。
摘要由CSDN通过智能技术生成

版权声明:本文为博主原创文章,未经博主允许不得转载。
微博:厉圣杰
源码:AndroidDemo/Fragment
文中如有纰漏,欢迎大家留言指出。

之前写过一篇关于 Fragment 生命周期的文章,针对 Fragment 各种情况下的生命周期进行了讨论,这段时间对 Fragment 的使用次数逐渐增加,对 Fragment 也有一定的了解,写此文以做总结。本文中使用 support library v4 包中的 Fragment。

本文大致会从以下几个方面对 Fragment 进行总结,如有不当之处,欢迎指出~
Fragment

Fragment 简介

Fragment 是在 Android 3.0 中引入,主要用于在大屏设备(如平板电脑)上支持更多动态和灵活的 UI 设计。 因为平板的屏幕比手机屏幕大得多,所以有更多的空间放更多的 UI 控件,也会产生更多的交互。Fragment 可以将 Activity 中的 UI 划分到自身,以实现在多个 Activity 中重用。

下图来自 Android 官方文档,很好的说明了 Fragment 的设计理念:
fragments

当在平板电脑上运行时,App 可以在 Activity A 中嵌入 2 个 Fragment。当用户在 Fragment A 中选中某个 Item 时就可以直接在 Fragment B 中展示内容。而在手机等小屏幕设备上,由于没有足够的空间,Activity A 只能展示 Fragment A,并且只能通过启动 Activity B 才能展示选中 Item 的内容。

Fragment 有自己的布局,有自己的生命周期,有自己的响应事件。但 Fragment 又依赖于 Activity 的存在,你可以把多个 Fragment 嵌入到一个 Activity 中或者多个 Activity 重用一个 Fragment。Activity 的生命周期直接影响 Fragment 的生命周期。在 Activity 运行过程中,可以添加、移除或者替换Fragment。

Fragment 使用比较多的直接子类有:

DialogFragment:一种特殊的 Fragment ,可以创建类似 Dialog 的对话框。
因为是 Fragment ,所以可以管理其生命周期。官方推荐使用。

ListFragment:类似于 ListActivity

PreferenceFragment:类似于 PreferenceActivity

关于 Fragment 子类的使用方式本文不在赘述,有兴趣的可以自行上网搜索~

Fragment 的创建

Fragment 可以通过 XML 静态添加,也可以通过代码动态添加,而动态添加又可以分为通过 new 一个Fragment 和通过 newInstance() 生成一个 Fragment 实例。

静态添加Fragment

首先,我们创建一个布局文件 fragment_test.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="This is a Fragment"
        android:textSize="20sp" />
</LinearLayout>

然后创建 TestFragment,该类继承作者自己封装的 BaseFragment ,与系统自带的 Fragment 有些许差异,但不影响理解

public class TestFragment extends BaseFragment {

    @BindView(R.id.tv_content)
    TextView mTvContent;

    private String mTitle;
    private int mBgColor;

    public static TestFragment newInstance(String title, int bgColor) {

        Bundle args = new Bundle();

        TestFragment fragment = new TestFragment();
        args.putString(Constant.EXTRA_TITLE, title);
        args.putInt(Constant.EXTRA_COLOR, bgColor);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    protected int getPageLayoutID() {
        return R.layout.fragment_test;
    }

    @Override
    protected void initData() {
        if (getArguments() == null) {
            return;
        }
        mTitle = getArguments().getString(Constant.EXTRA_TITLE);
        mBgColor = getArguments().getInt(Constant.EXTRA_COLOR);
    }

    @Override
    protected void initView(View view, Bundle savedInstanceState) {
        if (!TextUtils.isEmpty(mTitle)) {
            mTvContent.setText(mTitle);
        }
        mTvContent.setBackgroundColor(mBgColor);
    }

    @Override
    protected void initViewListener() {}

    @Override
    protected void process(Bundle savedInstanceState) {}
}

接下去,在 Activity 的布局文件中添加 TestFragment 即可,使用方法与普通控件相似。
activity_static_create.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_static_create"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.littlejie.demo.modules.base.fragment.create.StaticCreateActivity">

    <!-- name 属性用于指定使用哪个 Fragment -->
    <fragment
        android:name="com.littlejie.demo.modules.base.fragment.create.TestFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Activity 布局相对简单,这里就不再展示代码。运行效果如下:
Screenshot_1485150855-w200<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值