博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fragment
阅读量:4082 次
发布时间:2019-05-25

本文共 2691 字,大约阅读时间需要 8 分钟。

一、什么是Fragment?

1、Fragment是activity的界面中的一部分;多个Fragment们组合到一个activity中;多个activity中可重用一个Fragment。即Fragment相当于模块化的一段activity;

2、具有自己的生命周期,接收自己的事件;
3、在activity运行时被添加或删除。

二、为什么要使用Fragment?

1、支持更动态灵活的界面设计;2、activity的layout分成Fragment。

三、如何使用Fragment?

1、Create Fragment类 — onCreate() onCreateView() onPause()

2、Add Fragment

(1) Layout

activity_fragment.xml布局文件里添加如上代码后,运行,报如下错误:非法状态异常,Fragment没有创建View。

这里写图片描述

解决方法:

首先新建一个view布局文件如之前第二周写的item_listview.xml:

然后在FragmentTest类的onCreateView()方法里获取view:

@Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.item_listview,container);        return view;    }

(2)Java Code

FragmentManager;

FragmentTransaction;
Add/Remove

FragmentTestActivity类

package com.example.chenjinhua.redcircle;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;/** * Created by chenjinhua on 16/3/19. */public class FragmentTestActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FragmentTest fragmentTest = new FragmentTest(); fragmentTransaction.add(R.id.fragment_test_view,fragmentTest).commit(); }}

activity_fragment.xml布局文件:

FragmentTest类 同上。

运行报如下错误:

这里写图片描述

FragmentTestActivity类里fragment_test_view是父view;FragmentTest类里item_listview是子view。

解决办法:修改FragmentTest类里的onCreateView()方法

@Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        //解析出来的xml视图放到container里,不绑定        View view = inflater.inflate(R.layout.item_listview,container,false);        return view;    }

程序运行结果:

第一个Fragment是通过布局文件生成的,第二个Fragment是通过java code生成的。

这里写图片描述

删除fragment:修改FragmentTestActivity类代码为d

fragmentTransaction.add(R.id.fragment_test_view,fragmentTest);        fragmentTransaction.remove(fragmentTest).commit();

四、如何管理Fragment?

1、查找Fragment — findFragmentById() 和 findFragmentByTag()

Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_test);        if (fragment instanceof FragmentTest){            // TODO: Do your Action.        }else{            throw new IllegalStateException("iis not fragmentTest");        }

java里面的二元运算符,判断左边的对象是否是右边类的实例。假如是的话,返回true;假如不是的话,返回false

2、Fragment的后退 — Fragment Stack; popBackStack(); addOnBackStackChangedListener()

五、Fragment 生命周期

参考博客:

你可能感兴趣的文章
Java8 Lambda表达式介绍
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
在mc中直接加aswing组件,该组件还需最后用validate()方法
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>
谈谈加密和混淆吧[转]
查看>>
TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
查看>>
网络游戏客户端的日志输出
查看>>
关于按钮的mouseOver和rollOver
查看>>
《多线程服务器的适用场合》例释与答疑
查看>>
Netty框架
查看>>
Socket经验记录
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>