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和这个同样。


版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/gcczhongduan/p/4886196.html