android (12) Fragment使用上

一.Fragment概述:

在Fragment出现后,布局就更好的适应了各种大小尺寸的android手机,而且更加方便的实现不同页面的切换,就不像以前activity的跳转那样的麻烦了。可以在activity中嵌套不同的Fragment,每个Fragment可以用不同的布局,可以动态的进行添加、替换,就像下面的图片一样:

 

二. Fragment的生命周期:

每个Fragment都有自己生命周期,但是与activity的生命周期不全相同,Fragment额外的添加了5个生命周期回调方法。先看一下图:

这五个方法:

1.onAttach(Activity);  //当Activity与Fragment发生关联时调用。

2.onCreateView(LayoutInflater,ViewGroup,Bundle);  //创建该Fragment的视图

3.onActivityCreate(bundle);  //当Activity的onCreate();方法返回时调用

4.onDestoryView();  //与onCreateView相对应,当改Fragment被移除时调用

5.onDetach();  //与onAttach()相对应,当Fragment与Activity的关联被取消时调用

注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现。

继承Fragment必须重写这个方法:

(2).onCreateView():

fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View, 这个view就是你在fragment中实现的布局,不提供则返回null。

生命周期:

(1)第一次启动Fragment:

onAttach

onCreate

onCreateView

onActivityCreated

onStart

onResume

(2)切换到其他Fragment:

onPause

onStop

onDestroyView

(3)切换回来:

onCreateView

onActivityCreated

onStart

onResume

(4)返回手机桌面:

onPause

onStop

回到应用

onStart

onResume

(5)退出应用

onPause

onStop

onDestroyView

onDestroy

onDetach

三.动态的使用Fragment:

Fragment经常作为activity的界面的一部分,既然是一部分那么Fragment肯定会给activity用一个layout,也可以说是一个view,那么就要通过onCreateView返回activity一个layout,那么怎么返回呢?就要重写这个方法:

@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return super.onCreateView(inflater, container, savedInstanceState);
	}

这里的三个参数第一个inflater不用说是用来获得布局文件的,第二个参数container就是将要插入的父ViewGroup,第三个提供恢复Fragment提供数据用的。

重写就要这样实现:

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

这样就可以把Fragment布局返回了。

四.实现开始的效果图:

主界面:

public class MainActivity extends Activity implements OnClickListener {
	RelativeLayout r1;
	RelativeLayout r2;
	RelativeLayout r3;
	RelativeLayout view = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.bottom_layout);

		r1 = (RelativeLayout) findViewById(R.id.layout1);
		r2 = (RelativeLayout) findViewById(R.id.layout2);
		r3 = (RelativeLayout) findViewById(R.id.layout3);

		r1.setOnClickListener(this);
		r2.setOnClickListener(this);
		r3.setOnClickListener(this);
		setDefaultFragment();
	}

	private void setDefaultFragment() {
		FragmentManager fm = getFragmentManager();
		FragmentTransaction transaction = fm.beginTransaction();
		MyFragment my = new MyFragment();
		transaction.replace(R.id.frame_layout1, my);
		transaction.commit();
	}

	@Override
	public void onClick(View arg0) {
		FragmentManager fm = getFragmentManager();
		// 开启Fragment事务
		FragmentTransaction transaction = fm.beginTransaction();
		switch (arg0.getId()) {
		case R.id.layout1:
			if (view != null) {
				view.setBackgroundResource(R.color.back_bg);
			}
			view = r1;
			r1.setBackgroundResource(R.color.black_purple);
			MyFragment my = new MyFragment();
			transaction.replace(R.id.frame_layout1, my);
			transaction.commit();
			break;
		case R.id.layout2:
			if (view != null) {
				view.setBackgroundResource(R.color.back_bg);
			}
			view = r2;
			r2.setBackgroundResource(R.color.black_purple);
			MyFragment2 my2 = new MyFragment2();
			transaction.replace(R.id.frame_layout1, my2);
			transaction.commit();
			break;
		case R.id.layout3:
			if (view != null) {
				view.setBackgroundResource(R.color.back_bg);
			}
			view = r3;
			r3.setBackgroundResource(R.color.black_purple);
			MyFragment3 my3 = new MyFragment3();
			transaction.replace(R.id.frame_layout1, my3);
			transaction.commit();
			break;
		}

	}
}

主界面布局:

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

    <LinearLayout
        android:id="@+id/linear_layout"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="#696969"
        android:orientation="horizontal" >

        <RelativeLayout
            android:id="@+id/layout1"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/tab_bg" >

            <ImageView
                android:id="@+id/image1"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:background="@drawable/ic_launcher" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/image1"
                android:layout_centerHorizontal="true"
                android:text="音乐"
                android:textSize="13sp" >
            </TextView>
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/layout2"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/tab_bg" >

            <ImageView
                android:id="@+id/image2"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:background="@drawable/ic_launcher" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/image2"
                android:layout_centerHorizontal="true"
                android:text="电影"
                android:textSize="13sp" >
            </TextView>
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/layout3"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/tab_bg" >

            <ImageView
                android:id="@+id/image3"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:background="@drawable/ic_launcher" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/image3"
                android:layout_centerHorizontal="true"
                android:text="影视"
                android:textSize="13sp" >
            </TextView>
        </RelativeLayout>
    </LinearLayout>

    <FrameLayout
        android:id="@+id/frame_layout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/linear_layout" >
    </FrameLayout>

</RelativeLayout>

Fragment实现:

public class MyFragment extends Fragment{

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

}

Fragment布局:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_centerInParent="true"
        android:text="第一个页面" />

</RelativeLayout>

另外两个Fragment和这个相同。

时间: 2024-10-23 18:35:23

android (12) Fragment使用上的相关文章

Android之Fragment用法

本文翻译自Android developer网站上面,原文参考:Building a Dynamic UI with Fragments 当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就可以使用新的特性来方便的达到这个效果--Fragment类.Fragment类似一个嵌套Activity,可以定义自己的layout和自己的生命周期. 多个Fragm

android之Fragment基础详解(一)

一.Fragment的设计哲学 Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互. 针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的.难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊.Fragment的出现就是为了解决这样的问题.你可以把Frag

[转]Android:Activity+Fragment及它们之间的数据交换(一)

2014-05-18         来源:Android:Activity+Fragment及它们之间的数据交换(一)   简介: 为什么要用Fragment?使用Fragment可以在一个Activity中实现不同的界面.Fragment与 Fragment之间的动画切换,远比Activity与Activity之间的动画切换变化方式多.很多时候,我们通过使用一个Activity,切换 多个Fragment.本次博客,主要列举一下Fragment与它的Activity之间进行数据交换的方式.

Android中Fragment和ViewPager那点事儿

在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragment与Activity之间的交互(两种实现方式)>中我们介绍了ViewPager以及Fragment各自的使用场景以及不同的实现方式. 那如果将他们两结合起来,会不会擦出点火花呢,答案是肯定的.之前在介绍ViewPager时,我们实现了多个ImageView的切换,并配合更新导航原点的状态.那我们现在

Android 下拉刷新上拉加载效果功能,使用开源项目android-pulltorefresh实现

应用场景: 在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态加载数据的要求就会出现.为此,该效果功能就需要应用到所需要的展示页面中. 知识点介绍: 本文主要根据开源项目android-pulltorefresh展开介绍. android-pulltorefresh [一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.G

Android之fragment点击切换和滑动切换结合

学了一小段时间的Android,主要接触的是UI设计,打交道最多莫过于fragment了吧.在Android3.0引入了fragment的概念后,几乎在所以的Android的应用中都可以看见其身影,已经有很多前辈高人都已经详细介绍过fragmrnt,我这里就不多说什么了. 这里本来是想模仿一下微信的切换效果,怎奈水平不足,这里就献丑贴出半成品的代码,希望有大神能指点一下.废话不多说,上代码.先从简单的开始吧,这里是我一共用了3个fragment,这里就只贴出第一个的fragment的布局,别的两

ANDROID中FRAGMENT的两种创建方式

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

Android之 Fragment

什么是Fragment: Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块. 可以把Fragment设计成可以在多个Activity中复用的模块. 当开发的应用程序同时适用于平板电脑和手机时,可以利用Fragment实现灵活的布局,改善用户体验. Fragment的意义:

android基础----&gt;Fragment的使用

碎片(Fragment)是一种可以嵌入在活动当中的UI 片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛. Fragment的基础例子 一.增加Fragment,another_right_fragment.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

android 77 fragment

fragment是3.0之后才有的,之前平板是3.0专用,后来手机和平板都用3.0 Activity: package com.itheima.fragment; import android.os.Bundle; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.view.Menu; import andr