Fragment:
Fragemnt的出现就是因为屏幕变大(例如平板出现
2个不同活动界面手机需要2个activity显示但平板要显示在一个activity上),设计者想尽可能利用当前页面显示更多信息所以将一个activity界面又分为多个有生命周期回调函数的fragment。Fragment像是个小activity子activity,也有生命周期需要依附于activity存在所以其生命周期会受所依附的activity生命周期的影响。一个activity里可以有多个fragment,一个fragment也可以用于多个activity。
Fragment生命周期回调函数:
create前先绑定,destroy后再解绑
onAttach(Activity) //当Fragment与Activity发生关联时调用。从该方法开始,就可以通过 Fragment.getActivity方法获取与Fragment关联的窗口对象了,但在该方法中仍然无法操作Fragment中的控 件。
onCreateView(LayoutInflater, ViewGroup, Bundle)//创建该Fragment的视图。
onActivityCreated(Bundle)//当Activity的onCreate方法返回时调用。
onDestoryView()//与onCreateView相对应,当该Fragment的视图被移除时调用。
onDetach()//与onAttach相对应,当Fragment与Activity关联被取消时调用
静态使用fragment:
直接新建fragment文件(继承fragment必须至少重写有oncreate和onCreateView),调整对应layout。然后在activity的layoutxml文件内添加fragment组件并在其android:name项指定哪个fragment即可。
动态使用fragment:
这个才是fragment的强大之处,先把mainactivity的layoutxml文件中的fragment引用去掉,只留下最外层linearlayout层,并对此layout添加id。然后可以在activity.java文件内直接对此layout动态添加或替换成Fragment.
Mainactivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Display display = getWindowManager().getDefaultDisplay();//获得屏幕显示
if(display.getWidth()>display.getHeight())
{
getFragmentManager().beginTransaction().replace(R.id.main_layout,new Fragment1()).commit();
}else {
getFragmentManager().beginTransaction().replace(R.id.main_layout,new Fragment2()).commit();
}
}
报错Fragment1无法转换为Fragment:明明已经extends了,这种一般就是版本错误,方法内所需的fragment的版本和你继承的不同(看报错信息更改Fragment1所继承的版本即可)。
Fragment之间通信:
Fragment和Fragment之间的 通讯的桥梁就是这个FragmentManager这个类,这个类是用来管理所有的这个Fragment的,所以可以 找到任何一个所需要的Fragment类。
实际操作来说的话应该是在一个fragment中使用getActivity获得当前运行的上下文环境再.findViewById获得同一个Activity下不同Fragment内的组件信息。
例如:在fragment2内使用:
TextView textView = (TextView)getActivity().findViewById(R.id.f1textView);获取fragment1的textview。