详解Android中Fragment的两种创建方式

fragment是Activity中用户界面的一个行为或者是一部分。你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用。你可以认为fragment是activity的一个模块零件,它有自己的生命周期,接收它自己的输入事件,并且可以在Activity运行时添加或者删除。

两个概念:Fragment、宿主

fragment的生命周期直接受其宿主activity的生命周期的影响。例如,一旦activity被暂停,它里面所有的fragment也被暂停,一旦activity被销毁,它里面所有的fragment也被销毁。

Android在3.0(11)版本中引入7fragment的概念

有了fragment,你可以不必去管理视图体系的复杂变化。通过将actjvjty的布局分割成若干个fragment,可以在运行时编辑activity的呈现,并且那些变化会被保存在由activity管理的后台栈里面。

要创建一个fragment,必须创建一个fragment的子类(或是继承自它的子类)。fragment类的代码看起来很像activity。它与activity一样都有回调函数,例如onCreate(),onstart(),onPause(),和onstop()。事实上,如果你正在将一个现成的Android应用转而使用fragment来实现,可以简单的将代码从activity的回调函数移植到各自的fragment回调函数中。

除了基类fragment,这里还有几个你可能会继承的子类:

DialogFragment、ListFragment、PreferenceFragment

一般情况下,你至少需要实现以下几个生命周期方法:

onCreate():在创建fragment时系统会调用此方法。在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们。 onCreateView():在第一次为fragment绘制用户界面时系统会调用此方法。为fragment绘制用户界面,这个函数必须要返回所绘出的fragment的根View。如果fragment没有用户界面可以返回空。 onPause():系统会调用该函数作为用户离开fragment的第一个预兆(尽管这并不总意昧着fragment被销毁)。在当前用户会话结束之前,通常要在这里提交任何应该持久化的变化(因为用户可能不再返回)。

现在介绍将fragment添加到activity的两种方式:

(1)在activity布局文件里声明fragment

(2)通过java代码将fragment添加到已存的ViewGroup中

演示示例如下:

两种颜色区分两个不同的fragment:

(1)在activity布局文件里声明fragment

现在我们通过在layout主布局文件activity_main.xml里声明上图中左右两个fragment来实现显示效果。

第一步:在layout中创建左边(右边)的布局文件left_layout.xml(right_layout.xml)文件:

<?xml version="." encoding="utf-"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:background="#f"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="潘侯爷"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="碧空海"/> </LinearLayout>

第二步:建立left_layout.xml(right_layout.xml)布局对应的继承Fragment的java类LeftFragment.java(RightFragment.java)

LeftFragment.java文件:

import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by panchengjia on //. */ public class LeftFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //通过参数中的布局填充获取对应布局 View view =inflater.inflate(R.layout.left_layout,container,false); return view; } @Override public void onPause() { super.onPause(); } }

第三步:layout中在主布局文件activity_main.xml中声明左右两个fragment布局

<?xml version="." encoding="utf-"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context="com.example.administrator.fragmenttest.MainActivity"> <fragment android:layout_width="dp" android:layout_height="match_parent" android:layout_weight="" android:name="com.example.administrator.fragmenttest.LeftFragment" tools:layout="@layout/left_layout" /> <fragment android:layout_width="dp" android:layout_height="match_parent" android:layout_weight="" android:name="com.example.administrator.fragmenttest.RightFragment" tools:layout="@layout/right_layout" /> </LinearLayout>

(2)通过java代码将fragment添加到已存的ViewGroup中

这里我们演示将右边侧的fragment(right_layout.xml)通过java代码添加到主布局viewgroup。

通过代码添加fragment用到的知识点汇总如下:

想要管理activity中的fragment,可以使用FragmentManager。可以通过在activity中调用getFragmentManager()获得。使用FragmentManager可以做如下事情,包括:

1.使用findFragmentByld()(用于在activity布局中提供有界面的fragment)或者fjndFragmentByTag()获取activity中存在的fragment(用于有界面或者没有界面的fragment)。

2.使用popBackstack()(模仿用户的BACK命令)从后台栈弹出fragment。

3.使用addonBackstackChangedListener()注册一个监听后台栈变化的监听器。

在activity中使用fragment的一大特点是具有添加、删除、替换,和执行其它动作的能力,以响应用户的互动。提交给activity的每一系列变化被称为事务,并且可以用FragmentTransactjon中的APIs处理。

这里用到的的知识点会在代码中做标注,大家可以通过查看API文档具体了解扩展用法。

第一步:Layout中主布局文件activity_main2.xml文件(左侧fragment布局直接在布局中声明,右侧fragment通过代码填充到FrameLayout实现):

<?xml version="." encoding="utf-"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context="com.example.administrator.fragmenttest.MainActivity"> <fragment android:layout_width="dp" android:layout_height="match_parent" android:layout_weight="" android:name="com.example.administrator.fragmenttest.LeftFragment" tools:layout="@layout/left_layout" /> <FrameLayout android:id="@+id/right" android:layout_width="dp" android:layout_height="match_parent" android:layout_weight=""></FrameLayout> </LinearLayout>

第二步:Java中对应主布局的Main2Activity.java通过代码将fragment添加到主布局ViewGroup中:

import android.app.FragmentManager; import android.app.FragmentTransaction; import android.support.v.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { //声明本次使用到的java类 FragmentManager fragmentManager; FragmentTransaction fragmentTransaction; RightFragment rightFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*在activity对应java类中通过getFragmentManager() *获得FragmentManager,用于管理ViewGrop中的fragment * */ fragmentManager=getFragmentManager(); /*FragmentManager要管理fragment(添加,替换以及其他的执行动作) *的一系列的事务变化,需要通过fragmentTransaction来操作执行 */ fragmentTransaction = fragmentManager.beginTransaction(); //实例化要管理的fragment rightFragment = new RightFragment(); //通过添加(事务处理的方式)将fragment加到对应的布局中 fragmentTransaction.add(R.id.right,rightFragment); //事务处理完需要提交 fragmentTransaction.commit(); } }

今天就到这,fragmen与activity之间的交互我们后面做详细讲述,早点睡觉了。

时间: 2024-09-21 15:26:12

详解Android中Fragment的两种创建方式的相关文章

详解Android中Fragment的两种创建方式_Android

fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认为fragment是activity的一个模块零件,它有自己的生命周期,接收它自己的输入事件,并且可以在Activity运行时添加或者删除. 两个概念:Fragment.宿主 fragment的生命周期直接受其宿主activity的生命周期的影响.例如,一旦activity被暂停,它里面所有的fra

Android 中倒计时验证两种常用方式实例详解

Android 中倒计时验证两种常用方式实例详解 短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用.看图: 说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的. 1.第一种方式:Timer /** * Description:自定义Timer * <p> * Created by Mjj on 2016/12/4. */ public class TimeCount extends CountDownTimer { private Button button; //参数依

javascript中createElement的两种创建方式

  本文实例讲述了javascript中createElement的两种创建方式.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <html xmlns="http://www.w3.org/1999/xhtml"> &l

javascript中createElement的两种创建方式_javascript技巧

本文实例讲述了javascript中createElement的两种创建方式.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>CreateElement

深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解_Android

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

详解Android中Intent对象与Intent Filter过滤匹配过程_Android

如果对Intent不是特别了解,可以参见博文<详解Android中Intent的使用方法>,该文对本文要使用的action.category以及data都进行了详细介绍.如果想了解在开发中常见Intent的使用,可以参见<Android中Intent习惯用法>. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 一.概述 我们知道,Intent是分两种的:显式Intent和隐式

详解Android中Handler的内部实现原理_Android

本文主要是对Handler和消息循环的实现原理进行源码分析,如果不熟悉Handler可以参见博文<详解Android中Handler的使用方法>,里面对Android为何以引入Handler机制以及如何使用Handler做了讲解. 概括来说,Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制.我们在使用Handler的时候与Message打交道最多,Message是Hanlder机制向开发人员暴露出来的相关类,可以通过Message类完成大部分操作Handler的功

详解Android中的Service

Service简介: Service是被设计用来在后台执行一些需要长时间运行的操作. Android由于允许Service在后台运行,甚至在结束Activity后,因此相对来说,Service相比Activity拥有更高的优先级. 创建Service: 要创建一个最基本的Service,需要完成以下工作:1)创建一个Java类,并让其继承Service 2)重写onCreate()和onBind()方法 其中,onCreate()方法是当该Service被创建时执行的方法,onBind()是该S