Fragment

起草人: 高参 1501210527 日期:15年00月00日

修改完善:李智博 1501210942 日期:15年00月00日

一、实验目的

Fragment的使用方式及生命周期

二、基础知识

简要介绍本次实验所需掌握的基础知识

  • 知识点:Fragment的简介

       Fragment是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。它和活动是很像,同样都能包含布局,同样都有自己的生命周期。你可以将碎片理解成一个迷你型的活动,虽然这个迷你型的活动有可能和普通的活动是一样大的。总的说来Fragment是嵌套在Activity上面的,多个Fragment可以嵌套在一个Activity上。

三、实验内容及步骤

3.1 实验内容

       通过xml布局⽂文件嵌套多个Fragments,在Activity中动态加入Fragments

3.2 实验步骤

       新建一个项目并命名为fragments。在布局文件夹下建一个Fragment1.xml和Fragment2.xml文件。分别如下布局:

       并在主布局文件中将两个fragment添加进去,如下:

       增加两个java class文件,并命名为Fragment1.java和Fragment2 .java,分别在其onCreateView()做如下增加:

       在Fragment1类当中加入如下的函数,便于追踪Fragment生命周期中函数的调用情况。

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    Log.e("Fragment1", "onAttach");
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("Fragment1", "onCreate");
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Log.e("Fragment1", "onActivityCreated");
}

@Override
public void onStart() {
    super.onStart();
    Log.e("Fragment1", "onStart");
}

@Override
public void onResume() {
    super.onResume();
    Log.e("Fragment1", "onResume");
}

@Override
public void onPause() {
    super.onPause();
    Log.e("Fragment1", "onPause");
}

@Override
public void onStop() {
    super.onStop();
    Log.e("Fragment1", "onStop");
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    Log.e("Fragment1", "onDestroyView");
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.e("Fragment1", "onDestroy");
}

@Override
public void onDetach() {
    super.onDetach();
    Log.e("Fragment1", "onDetach");
}

       测试结果如下:

       生命周期分析
       a. 当载入真机上时,依次运行方法onCreate()->onCreateView()-> onActivityCreated ()->onStart()->onResume(),logcat如下图:

       b. 当点击home退出并重进时,依次运行方法onPause()->onStop()->onStart()->onResume(),logcat如下图:

       c. 当点击home键退出并在后台关闭该应用时,依次运行方法onPause()->onStop()->onDestroyView()->onDestroy()->onDetach(),logcat如下图:

       ➤ onAttached() —函数在fragment和activity建立关联的时候调用;
       ➤ onCreateView() — 函数在fragment加载布局时调用;
       ➤ onActivityCreated() — 函数在activity中的onCreate函数执行完后调用;
       ➤ onDestroyView() — 函数在fragment中的布局被移除时调用;
       ➤ onDetach() — 函数在fragment和activity解除关联时调用。

四、常见问题及注意事项

4.1如何在活动中调用碎片里的方法

       为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,代码如下所示: RightFragment rightFragment = (RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment); 调用 FragmentManager 的 findFragmentById()方法,可以在活动中得到相应碎片的实例, 然后就能轻松地调用碎片里的方法了。

4.2如何在碎片中调用活动里的方法

       在每个碎片中都可以通过调用getActivity()方法来得到和当前碎片相关联 的活动实例,代码如下所示: MainActivity activity = (MainActivity) getActivity();有了活动实例之后,在碎片中调用活动里的方法就变得轻而易举了。另外当碎片中需要使用 Context 对象时,也可以使用getActivity()方法,因为获取到的活动本身就是一个 Context 对象了。

4.3如何碎片和碎片之间可不可以进行通信呢

       首先在一个碎片中可以得到与它相关联的活动,然后再通过这个活动去获取另外一个碎片的实例,这样也就实现了不同碎片之间的通信功能。

results matching ""

    No results matching ""