一, Fragment是什么? >Android 3.0以后出现的 Api11 以上 Activity的组成部分 Fragment(小的Activity) Fragment可以显示 UI内容 可以和用户进行交互
Fragment的主要作用:提高代码的重用性 和用户体验 可以对Activity组件 进行分组和模块化的管理
Fragment 有自己的生命周期 可以接受和处理用户的事件 可以在Activity中 添加,替换和移除 Fragment
注意:1,Fragment必须依附Activity 2,一个Activity可以包含多个Fragment,一个Fragment可以 被多个Activity使用
二, 如何创建Fragment >1,创建一个类继承Fragment >2,得到Fragment生命周期方法 onCreateView() (展示UI)
三, Fragment 的显示方式 >1,静态展示Fragmeng(在布局中直接添加Fragment) >1,在布局中<fragment>标签 >2,id Fragmeng的唯一标识 >3,name 添加的是那个Fragmeng
>2,动态添加Fragment(在布局中添加一个容器,动态代码将Fragmeng添加到容器) >1,在布局中添加容器 >2,在逻辑代码中 获取FragmengManage >3,通过Fragmeng的事务 >4,Fragmeng的事务 将Fragmeng添加相应的容器 >5,Fragment的事务 提交
四,Activity向Fragment传值
>Activity:(setArguments(bundle)) //传值 ActivityToFragment Bundle bundle = new Bundle(); bundle.putString("msg", "今天开会"); //传值 myFragment.setArguments(bundle);
>Fragment:(getArguments() //获取传递过来的值 Bundle bundle = getArguments(); //获取值 String msg = bundle.getString("msg");
五, Fragment 向Activity传值 (接口回调) >1,创建一个回调接口 >2,在Activity中实例化回调接口 >3,将实例化的接口传给Fragment (getActivity) >4,在Fagment中 将值传递给Activity
六, Fragment向Fragment传值 >1,setArgument() //传值 MyFragment2 myFragment2 = MyFragment2.newInstance(bundle); MyFragment2 myFragment2 = new MyFragment2(); myFragment2.setArguments(bundle);
>2,在Fragment1中找到Fragment2对象 通过对象调方法 通过Fragment的id 获取Fragment2的对象 Fragment2 fragment2 = (Fragment2) getFragmentManager().findFragmentById(R.id.rightfragment); fragment2.setTextValues(msg); >3,在Fragment1中找到Fragment2中的控件 TextView tv = (TextView) getFragmentManager().findFragmentById(R.id.rightfragment).getView().findViewById(R.id.tv_show); TextView tv = (TextView) getActivity().findViewById(R.id.tv_show); tv.setText(msg); 七, Fragment的生命周期 11个生命周期方法
第一次打开app 09-08 06:05:55.590: E/MainActivity(3786): ==onCreate== 09-08 06:05:55.590: E/MyFragment(3786): ==onAttach== 09-08 06:05:55.590: E/MyFragment(3786): ==onCreate== 09-08 06:05:55.600: E/MyFragment(3786): ==onCreateView== 09-08 06:05:55.600: E/MyFragment(3786): ==onActivityCreated== 09-08 06:05:55.600: E/MainActivity(3786): ==onStart== 09-08 06:05:55.600: E/MyFragment(3786): ==onStart== 09-08 06:05:55.600: E/MainActivity(3786): ==onResume== 09-08 06:05:55.610: E/MyFragment(3786): ==onResume==
按Home键时 09-08 06:07:08.211: E/MyFragment(3786): ==onPause== 09-08 06:07:08.211: E/MainActivity(3786): ==onPause== 09-08 06:07:10.090: E/MyFragment(3786): ==onStop== 09-08 06:07:10.090: E/MainActivity(3786): ==onStop==
重新返回到界面
09-08 06:08:11.391: E/MainActivity(3786): ==onRestart== 09-08 06:08:11.391: E/MainActivity(3786): ==onStart== 09-08 06:08:11.391: E/MyFragment(3786): ==onStart== 09-08 06:08:11.391: E/MainActivity(3786): ==onResume== 09-08 06:08:11.411: E/MyFragment(3786): ==onResume==
按返回键时 09-08 06:09:12.440: E/MyFragment(3786): ==onPause== 09-08 06:09:12.440: E/MainActivity(3786): ==onPause== 09-08 06:09:14.110: E/MyFragment(3786): ==onStop== 09-08 06:09:14.110: E/MainActivity(3786): ==onStop== 09-08 06:09:14.110: E/MyFragment(3786): ==onDestroyView== 09-08 06:09:14.110: E/MyFragment(3786): ==onDestroy== 09-08 06:09:14.110: E/MyFragment(3786): ==onDetach== 09-08 06:09:14.110: E/MainActivity(3786): ==onDestroy==
八, V4包中的Fragment使用
>V4支持Android1.6
使用; * 1,创建一个类 继承V4包的Fragment * 2,修改Activity 变成FragmentActivity * 3,获取管理者对象 V4 getSupportFragmentManager() 获取事务 V4
note:用V4的Fragment 全部改成V4的 用app包的 全部用app包
九, listFragment的使用(了解) >ListFragment 里面封装了 ListVIew : id为: android:id="@id/android:list" >设置数据的方法 点击监听的方法
十,回退栈
.addToBackStack(null)//回退栈 参数:标记 如果没有标记 null .commit()
