Fragment知识概要
- Fragment可以作为Activity界面的一部分组成出现
- 可以在一个Activity中同事出现多个Fragment,并且一个Fragment也可以在多个Activity中使用
- 在Activity运行过程中,可以添加、移除或替换Fragment
- Fragment可以响应自己的输入时间,并且有自己的生命周期,它们的生命周期会受宿主Activity的生命周期影响
onCreateView() 方法
Fragment第一次绘制它的用户界面的时候,系统会调用此方法,为了绘制Fragment的UI,此方法必须返回一个View,如果不显示UI,返回null即可
Fragment加载方式
静态加载
在Activity的layout文件中声明Fragment,需要特别注意的是中的android:name属性指定了在layout中实例化的Fragment类
标识Fragment的方法
android:id 属性提供一个唯一ID
android:tag属性提供一个唯一字符串
动态加载
用一个 FrameLayout 承载
getFragmentManager().popBackStack();
这样话在fragment中后退
Fragment的生命周期
当通过XML布局文件的方式将Fragment添加进activity时,Fragment是不能被动态移除的。如果想要在用户交互的时候把fragment切入与切出,必须在activity启动后,再将fragment添加进activity。
替换fragment的过程类似于添加过程,只需要将add()方法替换为 replace()方法。
记住在执行fragment事务时,如移除或者替换,我们经常要适当地让用户可以向后导航与”撤销”这次改变。为了让用户向后导航fragment事务,我们必须在FragmentTransaction提交前调用addToBackStack()方法
Fragment 之间的交互
为了让fragment与activity交互,可以在Fragment类中定义一个借口,并在activity中实现。Fragment在他们的生命周期的onAttach()方法中获取接口的实现,然后调用接口的方法与Activity交互。
1、在fragment中定义如下 public interface mCallBack{ public void myCall(); } 2、在activity中实现这个`myCall()` 方法 3、在fragment中获取activity Activity activity = getActivity(); mycall = (mCallBack)activity; 4、然后就可以在fragment中调用这个方法了 mycall.myCall();
对3中的步骤不是很清楚,应该是获取这个activity然后向下转型得到mycall吧。。。
当移除或者替换一个fragment并把它放入返回栈中时,被移除的fragment的生命周期是stopped(不是destoryed).当用户返回重新恢复这个fragment,它的生命周期是restarts。如果没有把fragment放入返回栈中,那么当它被移除或者替换时,其生命周期是destoryed。
fragment 之间传递数据
1、
afragment = new afragment();
Bundle args = new Bundle();
args.putInt("a", 2);
2、
ita =getArguments().getInt("a");
ita 在类开始处定义好。