zoukankan      html  css  js  c++  java
  • 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和这个同样。


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

  • 相关阅读:
    vs2019编译错误:Exception Processing Message 0xc0000005 Parameters...
    error LNK2001
    Debug Assertion Failed
    对路径“………………”的访问被拒绝
    c语言打开文件为什么总是以二进制方式打开
    关于typedef的用法总结
    xml学习第一天
    关于VS2017编译成功系统找不到指定文件.exe的问题
    引入的外部js文件在html文件在浏览器中乱码显示
    结对作业(四则运算)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4886196.html
Copyright © 2011-2022 走看看