Fragment实例
来源:互联网 发布:centos yum 网卡驱动 编辑:程序博客网 时间:2024/06/14 12:10
参考自 http://blog.csdn.net/flowingflying/article/details/12505453 系列八篇文章
很详细,在这总结一些自己需要的
一,关于生命周期
因为Fragment有两种引入方式,两种引入方式生命周期不尽相同(这里主要比较的是开启Fragment时的不同)
1,由布局文件xml中指定类名称而引入Fragment
生命周期为:
activity:oncreate->setContentView-> ->setContentView->oncreate
fragment: onInflate->onAttach->onCreate->onCreateView ->onActivityCreate->onStart->onResume
注:setContentView为oncreate中的,首尾的setContentView和oncreate分别代表其开始和结束
2,另外一种是在Fragment类中代码引入Fragment
生命周期为:
fragment:onAttach-->onCreate-->onCreateView-->onActivityCreate-->onStart-->onResume
不同之处:1,引入方式2中就没有onInflate方法了
2,引入方式2的fragment生命周期与activity没有关系了
3,引入方式1的setContentView的开始和结束,oncreate的结束分别为fragment生命周期的三个切割点
从程序的运行输出也可以看出activity和fragment的生命周期了
完整的activity和fragment的生命周期的对比
二,关于两种引入fragment的方法
1,由布局文件xml中指定类名称而引入Fragment(把android:name替换为class也可以)
<fragment android:name="com.wei.flowingflying.pro.ProFragment.TitleFragment" android:id="@+id/titles" android:layout_width="match_parent" android:layout_height="match_parent" />2,另外一种是在Fragment类中代码引入Fragment
一般在Fragment类的onCreateView中引入
//注意,我们并不需要在代码中将子容器(引入的详情view)放入FrameLayout(container)中,系统会自动完成,如果我们将两者关联,反而会出现异常。@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubshowInfo("onCreateView() is called.." + getActivity());showInfo(" container is " + container);//即第三个参数置为false,不让详情view和container关联起来View v = inflater.inflate(R.layout.details, container,false);TextView tv = (TextView)v.findViewById(R.id.text1);tv.setText(BooksInfo.TITLES[mIndex] + "\n\n" +BooksInfo.DIALOGUE[mIndex]);showInfo(" return " + v);return v;}
三,fragment参数传递
在当前fragment传递参数可以直接使用setArguments(bundle)和getArguments()获取bundle
在当前fragment设置或获取其他fragment或activity的参数,需要new fragment再fragment.setArguments(bundle)和fragment.getArguments()
Bundle b = getArguments();if(b != null){mCurCheckPosition = b.getInt("index", -1);showInfo(" arg : index " + mCurCheckPosition);}else{b = new Bundle();b.putInt("index", mCurCheckPosition);setArguments(b);}
四,一些有关于fragment的方法
1,添加Fragment的方法
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
add()的第一个参数是fragment要放入的ViewGroup,由resource ID指定, 第二个参数是需要添加的fragment,一旦FragmentTransaction做了改变,为了使改变生效,必须调用commit()
2,替换Fragment的方法
fragmentTransaction.replace(R.id.fragment, fragment);
replace()的两个参数分别是原fragment的id和新的fragment
3,加入BackStack的方法(加入堆栈中,相当于添加到activity的界面管理器中)
addToBackStack(tag)
如果是add方法则加入到堆栈的是新的fragment,如果是replace方法则是原fragment
把Fragment添加到BackStack后,点击返回时就会回到上一个显示的Fragment
如果不添加就直接退出了activity
DetailFragment detail = DetailFragment.newInstance(index);FragmentTransaction ft = getFragmentManager().beginTransaction();ft.replace(R.id.details, detail);ft.addToBackStack("detail");ft.commit();
实例代码(主要是多了些注释)http://download.csdn.net/detail/superjunjin/8554121
原文章代码 http://blog.csdn.net/flowingflying/article/details/12505453
另外:代码实现了官方文档的效果,关于横竖屏切换的,横屏显示title和detail 竖屏为只显示title 点击title再显示详情效果(看代码注释或原文章就懂了)
另外两个例子的代码也放这了
http://download.csdn.net/detail/superjunjin/8536659
http://download.csdn.net/detail/superjunjin/8536759
- fragment实例
- Fragment实例
- Fragment小实例
- Android Fragment 实例
- Android Fragment实例
- Fragment 实例(1234)
- Fragment 简单实例详解
- Android Fragment实例
- Android组件:Fragment实例
- Android Fragment 简单实例
- Fragment应用实例
- Android Fragment实例
- Android Fragment实例
- fragment应用实例二
- Fragment简单实例
- Android Fragment实例
- SlidingMenu+viewpager+fragment实例
- Fragment应用实例
- 计算机组成原理入门(三)
- Leetcode:Excel Sheet Column Title
- 物联12:rfid通信方式
- HTTP协议
- BZOJ 3614 Heoi2014 逻辑翻译 分治 = =HEOI2014全AC达成?
- Fragment实例
- Android Paint之 setXfermode PorterDuffXfermode 讲解
- Python基础10 反过头来看看
- 使用JavaScript验证数字和字符串和表单或焦点
- ios实现一个简单的XMPP即时通讯程序
- xcode-select --install
- BZOJ3262【CDQ分治】
- js 数学计算和字符串处理例子
- C语言中结构体变量之间赋值