Fragment介绍
来源:互联网 发布:金融学实训软件 编辑:程序博客网 时间:2024/06/04 19:05
一、Fragment简介
Fragment为大量不同型号、尺寸、分辨率的设备提供了一种统一的UI优化方案。
Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期。
每个Fragment都是独立的模块,并与它绑定的Activity紧密联系在一起。多个Activity可以共用一个Fragment。
Fragment展现了良好的适应性和动态构建UI的能力,可以在一个正在显示的Activity中添加、删除或替换Fragment。
二、创建Fragment
可以通过集成Fragment类来创建一个Fragment,大多数情况下需要为Fragment分配一个UI,也可以为Activity创建一个没有UI但提供后台行为的Fragment。如果Fragment需要UI,可以重新OnCreateView
方法来填充并返回所需要的View。
代码示例:
import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 创建或者填充Fragment的UI,并且返回它。 // 如果这个Fragment没有UI则返回null return inflater.inflate(R.layout.my_fragment, container, false); }}
三、FragmentManager介绍
每个Activity都包含一个FragmentManager来管理它所包含的Fragment。可以通过使用getFragmentManager
方法来访问FragmentManager:
FragMentManager fragmentManager = getFragMentManager();
FragmentManager提供了很多方法来访问当前添加到Activity上的Fragment、通过执行FragmentManager来添加、删除和替换Fragment。
四、向Activity中添加Fragment
想要把一个Fragment添加到一个Activity钟,最简单的方法是在Activity布局中使用fragment标签来包含它,如下所示:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <fragment android:name="包名.Fragment类名" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/my_fragment"/></LinearLayout>
一旦一个Fragment被填充后,它就成为一个ViewGroup,会在Activity内显示和管理它所包含的UI。
如果想要在运行时通过添加、删除或者替换Fragment的方式修改UI,更好的方法是在布局文件中添加ViewGroup作为Fragment的容器,然后在代码中使用FragmentTransaction来创建相应的Fragment并添加到ViewGroup中。
五、使用FragmentTransaction
在程序运行时,FragmentTransaction可以用来在一个Activity内添加、删除或替换Fragment。它同样也支持显示过渡动画的规范以及是否在back栈中包含Transaction。
一个新的FragmentTransaction是通过使用Activity的FragmentManager中的beginTransaction
方法创建的。在设置显示动画之前,可以根据要求使用add、remove、和replace方法来修改布局,并设置恰当的back栈行为。当准备执行改变时,调用commit方法将事务添加到UI队列。
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 添加、删除或者替换Fragment// 指定动画// 如果需要的话,添加到back栈中fragmentTransaction.commit();
调用 commit()后,事务并不会马上执行。它会在 activity 的 UI 线程(其实就是主线程)中等待直到线程 能执行的时候才执行(废话)。如果必要,可以在 UI 线程中调用 fragmentManager.executePendingTransactions()
方法来立即执行事务。
六、添加、删除和替换Fragment
添加一个新的UIFragment时,需要指定要添加的Fragment实例和将要放置它的容器View。另外,还可以为这个Fragment指定一个tag标识,后面通过这个标识,可以使用findFragmentByTag
方法找到相应的Fragment。
// 添加Fragment到容器ViewfragmentTransaction.add(容器View的id, Fragment实例);// 添加Fragment到容器View,并给Fragment指定tagfragmentTransaction.add(容器View的id, Fragment实例, tag);
查找Fragment通常可以通过FragmentManager的findFrafmentById
或者findFragmentByTag
方法来实现:
Fragment fragment_id = fragmentManager.findFragmentById(fragment组件的id);Fragment fragment_tag = fragmentManager.findFragmentByTag(Fragment实例的tag);
想要删除一个Fragment,首先需要找到对这个Fragment的引用,然后把找到的Fragment实例作为参数传给FragmentTransaction的remove方法。
fragmentTransaction.remove(Fragment实例);
除了添加和删除操作外,还可以使用replace方法替换Fragment,指定要替换的Fragment的父容器的id、一个新的Fragment和tag标识。
// 替换容器View中的FragmentfragmentTransaction.replace(容器View的id, Fragment实例);// 替换容器View中的Fragment,并给新的Fragment指定tagfragmentTransaction.replace(容器View的id, Fragment实例, tag);
注意:在添加、删除和替换操作之后,都需要调用fragmentTransaction.commit();
方法提交事务
七、Fragment back栈的管理
假设现在我们有两个Fragment:Fragment01和Fragment02,我们现在从Fragment01的界面跳到Fragment02,然后按Back键,发现程序是直接退出了,而不是返回到Fragment01。如果现在想实现以下功能:从Fragment01的界面跳到Fragment02,然后按Back键,会返回到Fragment01。这个功能该怎么实现呢?这其实就利用到了返回栈的知识。
其实很简单,FragmentTransaction中提供了一个addToBackStack()方法,可以将一个事务添加到返回栈中。
FragmentManager fragmentManager = getFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 添加、删除或者替换Fragment// 指定动画// 添加到back栈中,参数用于描述返回栈的状态,一般传null即可fragmentTransaction.addToBackStack(null);fragmentTransaction.commit();
八、对Fragment设置切换动画
FragmentTransaction类中定义了一些默认的动画,可以对任何FragmentTransaction使用setTransition方法,并传入一个FragmentTransaction.TRANSIT_*
常量:
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
也可以通过setCustomAnimations
方法对FragmentTransaction设置自定义的动画:
fragmentTransaction.setCustomAnimations(Fragment进入的动画资源id, Fragment退出的动画资源id);
- Fragment 介绍
- Fragment介绍
- Fragment介绍
- Fragment介绍
- Fragment介绍
- Fragment介绍:
- Fragment介绍
- Fragment介绍
- 【fragment】Android Fragment 基本介绍
- Android Fragment---概要介绍
- Fragment应用的介绍
- Android Fragment---概要介绍
- android fragment详细介绍
- Android4.0-Fragment介绍
- android fragment详细介绍
- fragment的简单介绍
- Android Fragment 基本介绍
- android fragment详细介绍
- WebView和js交互
- Codevs3657括号序列题解
- 第37讲-项目四-大奖赛计分
- Flex4.6+blazeDS+MyEclipse10+SQLSERVER项目环境搭建
- UIScrollView 之 EXC_BAD_ACCESS
- Fragment介绍
- LeetCode | Reverse Integer
- C#常用方法
- 从阳灿众筹网,看国内众筹平台的推广
- 第三次java作业:网络编程
- 安卓使用闪光灯
- 双线程间的通信
- android的动画之translate
- 解决Android单个dex文件不能超过65536个方法问题