Fragment知识总结

Fragment的知识总结:

    以前都是自己学习Android,最近实习也学会了不少实用的东西,业余时间也抽出来看看视频什么的。
    今天看了几集老罗的第二季视频,发现对Fragment的了解还是不够深刻,下面为自己总结一下Fragment的知识点:
    

一、Fragment的理解:

    Fragment在英文里的意思是碎片,碎片这个词可能还是不够形象,我是这么理解的,Fragment是Activity的子元素,一个
  Activity里可以有一个或多个Fragment来模块化的实现界面效果,Fragment是一个可以在多个Activity中重复使用和添加的模块,
  每个Fragment都有自己的生命周期,用起来就像是一个封装好的布局,而且是在代码中很轻松就可以实现动态的添加、替换、
  删除等操作。

二、Fragment的生命周期:

    在这里,Fragment的生命周期可以拿出来和Activity的生命周期进行比较说明:
    下面先来简单介绍下Activity的生命周期:
Activity的生命周期包括onCreat();onStart();onPause();onStop();onResume();onReStart();onDestory();
Fragment的生命周期包括onAttach();onCreat();onCreatView();onActivityCreated();onStart();onResume();onPause();
onStop();onDestroyView();onDestroy();onDetach();
对于它们两个生命周期关系的理解,我喜欢用这张图表达:


其中和Activity的生命周期有几个不同的方法:
1、onAttach():这个方法是Fragment和Activity关联的时候调用,也就是第一个执行的。
2、onCreate():这个方法是在Fragment这个对象被实例化的时候调用的,里面写的是一些数据和变量。
3、onCreateView():刚开始接触Fragment的时候也迷惑了一段时间,既然有了onCreate()方法了,还要onCreateView()干嘛,
不是多此一举?而且它俩有什么区别?
后来才发现,有好多工作是需要用到Fragment的View的。比如寻找ID,就必须View.findViewById();不然会报null;
4、onActivityCreated():是Activity的onCreated()方法执行完之后调用。当然前提是这个Fragment已经被添加到这个Activity中了。
5、最后的三个onDestoryView()、onDestory()、onDetach()方法看名字也能猜到依次是销毁布局、销毁对象、解绑Activity。
其他的就和Activity的生命周期一样了。


三、Fragment的用法:

    在实际使用中,和Fragment有直接关系的关键性类有FragmentManager、FragmentTransaction。FragmentManager顾名思义就是
  Fragment的管理器,FragmentTranscation是FragmentManager里的一个可以直接对Fragment操作的工具。具体使用方法如下:
   

1、创建一个Fragment:

 //需要注意的是:android.app.Fragment这个包下的Fragment已经被提示过时了,因为有V4包下的Fragment将它代替了。因为
  app包下的Fragment只支持3.0以上的系统,而V4包下的Fragment是可以向下兼容的。这个导包的时候需要注意一下。
    
public class MyFragment extends Fragment {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// 在这里初始化一下需要的控件和变量
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
                //inflater 是布局构造器
                //container 是Fragment默认返回的一个ViewGroup
                //我们只需要用布局构造器构造出Fragment的布局,然互用addView(view)这个方法添加到ViewGroup中即可。
                //也可以直接return view;这样直接返回我们构造的View
                View view = inflater.inflate(R.layout.layout_fragment, null);
		container.addView(view);
		return super.onCreateView(inflater, container, savedInstanceState);
	}

	@Override
	public void onPause() {
		// 应用暂停的时候,在这里上传保存一些用户数据,因为可能用户就不回来了,以免数据丢失。
		super.onPause();
	}

	@Override
	public void onDestroy() {
		// 在这里同样是可以上传和保存数据
		super.onDestroy();
	}

}

layout_fragment的布局如下:

<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_centerInParent="true"
        android:id="@+id/tv_text"
        android:background="#00ff00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个Fragment"
        android:textSize="20sp" />

</RelativeLayout></span>


上面的整个类,就相当于创建了一个Fragment,下面我们再来看看怎么在Activity中关联它:

 

2、添加和替换一个Fragment到Activity的布局中

public class MainActivity extends Activity {
	
	private FragmentManager mFragmentManager ;
	private FragmentTransaction mFragmentTransaction;
	private MyFragment myFragment ;
	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//用这种方式获取FragmentManager
		mFragmentManager = getFragmentManager();
		//调用FragmentManager的beginTransaction来获取这个工具对Fragment进行操作
		mFragmentTransaction = mFragmentManager.beginTransaction();
		//创建MyFragment对象
		myFragment = new MyFragment();
		//将我们创建的Fragment添加到Activity布局中的FragmentLayout中
		mFragmentTransaction.add(R.id.fragment,myFragment,"fragment1");
		//用一个新的的Fragment将FragmentLayout中原Fragment给替换掉
                //mFragmentTransaction.replace(R.id.fragment,myFragment,"fragment2");
                //移除FragmentLayout中的某个Fragment
                //mFragmentTransaction.remove(myFragment);          
                //这个方法的作用是调用之后,点击返回键,不会返回Activity,而是会返回Fragment的上一个状态。
              mFragmentTransaction.addToBackStack(null);
         //必须调用这个方法才会有效     
       mFragmentTransaction.commit();     
      //这里的fragment1和fragment2是必须添加的一个唯一的Fragment标示
 
 
 

                       

  }} 
效果图如下:
 <img src="https://img-blog.csdn.net/20150202194410366?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTYwMTQ0NTk4NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

需要注意的是,添加和替换Fragment的时候,都需要给每个Fragment添加一个唯一的标示,代码中的fragment1和fragment2
即是。
另外,在Activity中可以通过FragmentManager来寻找到添加进去的Fragment,通过Id或者Tag(此处的Tag就是前面添加的)
寻找。
        MyFragment fragment1 = (MyFragment) mFragmentManager.findFragmentById(R.id.fragment);
        MyFragment fragment2 = (MyFragment) mFragmentManager.findFragmentByTag("fragment1");
 
activity_main的布局如下: 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.test.MainActivity$PlaceholderFragment" >

    <TextView
        android:id="@+id/tv_activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:background="#ff0000"
        android:text="我是一个Activity"
        android:textSize="20sp" />

    <FrameLayout
        android:layout_centerHorizontal="true"
        android:id="@+id/fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_activity" >
    </FrameLayout>

</RelativeLayout>
至于Fragment强大的效果我这里就不像大家展示了,相信每个人在实际开发中都会用到Fragment来实现动态的、
优美的、人性化的UI的。

看完这些大家是不是都发现了原来Fragment用起来这么简单。的确,在我写完这篇博客之后,我也发现了好像是
有点儿简单。。。。
我现在还是一个没毕业的菜鸟,半路出家自学的Android,写博客一是分享给自学的朋友,二是自己总结的时候
也学习到很多,里面有什么错的地方,望大神们不吝赐教。
欢迎转载分享学习!



 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值