【Android】Android中关于Fragment使用的CheckList
来源:互联网 发布:学校网络拓扑图图片 编辑:程序博客网 时间:2024/05/16 09:24
Fragment自Android3.0时代被推出,它 的出现一方面是为了缓解 Activity 任务过重的问题(大型项目中Activity会变得十分臃肿),另一方面是为了处理在不同屏幕上 UI 组件的布局问题(适配平板),而且它还提供了一些新的特性(例如 Retainable)来处理一些在 Activity 中比较棘手的问题,Fragment相对Activity来讲比较省资源,启动速度也相对较快(例如新版知乎就采用了一个Activity配合Fragment的方式,在使用的过程中能明显感觉到打开页面比之前快很多).但是Fragment也存在一个很严重的问题,那就是生命周期过于复杂,会出现一些莫名其妙的bug,像FaceBook,Square这些公司就对Fragment敬而远之.
究竟Fragment到底是好是坏,大家也总是吵个不休,没有一个结论,但是我个人还是比较喜欢使用Fragemnt的,可能是受到了我的启蒙书籍<<Android编程权威指南>>(这本书是一本基础书,里面对Fragment及其的推崇,奉行的原则就是AUF(Always Use Fragments),所以这里对Fragment的讲解还是很不错的)的影响吧.所以在这里对Fragment应该注意的地方做一个总结.
1.在Fragment的onCreateView()方法中,我们要通过LayoutInflater来inflate出一个布局(即rootView),但是在某些情况下(ViewPager随着页面滑动),这个onCreateView()方法会被调用很多次,这时我们最好对rootView做一下非空判断,否则多次重复执行inflate操作,并没有任何意义,
<span style="font-size:14px;">public class TestFragment extends Fragment { private View mRootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (null == mRootView) { mRootView = inflater.inflate(layout_id, container, false); } return mRootView; }}</span>
2.Fragment中可以通过saveInstanceState的方式来保存Fragment的状态
<span style="font-size:14px;"> /** * 从服务端拉取下来的数据 */ private String serverData; @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("data", serverData); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated (savedInstanceState); serverData = savedInstanceState.getString("data"); }</span>
<span style="font-size:14px;">private static final String EXTRA_STRING = "extra_string"; public static Fragment newInstance(String data) { Bundle args = new Bundle(); args.putString(EXTRA_STRING, data); TestFragment fragment = new TestFragment(); fragment.setArguments(args); return fragment; }</span>
<span style="font-size:14px;"> public class MainActivity extends Activity { private TestFragment mTestFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm = getSupportFragmentManager(); mTestFragment = (TestFragment) fm.findFragmentById(R.id.id_fragment_container); if(mTestFragment == null ) { mTestFragment = new TestFragment(); fm.beginTransaction().add(R.id.id_fragment_container,mTestFragment).commit(); } } }</span>
第13行对fragment做了一下非空判断,原因:当Activity因为配置发生改变(旋转屏幕)或内存不足被系统杀死,造成重建时,我们的Fragment会被保存下来,但是会创建新的FragmentManager,新的FragementManager会首先去获取保存下来的fragment队列,重建Fragment队列.所以我们在这里做一下判断,从而恢复之前的状态.防止Fragment被重复创建.
- FragmentPagerAdapter:对于不再需要的fragment,选择调用detach方法,仅销毁视图,并不会销毁fragment实例。
- FragmentStatePagerAdapter:会销毁不再需要的fragment,当当前事务提交以后,会彻底的将fragmeng从当前Activity的FragmentManager中移除,state标明,销毁时,会将其onSaveInstanceState(Bundle outState)中的bundle信息保存下来,当用户切换回来,可以通过该bundle恢复生成新的fragment,也就是说,你可以在onSaveInstanceState(Bundle outState)方法中保存一些数据,在onCreate中进行恢复创建。
- 所以,我们可以根据ViewPager的页数来灵活的选择自己应该使用Adapter,如果页数比较多的话,优先使用FragmentStatePagerAdapter,反之,则应该使用FragmentPagerAdapter.
- 【Android】Android中关于Fragment使用的CheckList
- Android中关于Fragment的使用和Fragment的生命周期
- 关于在android项目中使用fragment的个人经验
- 关于在android项目中使用fragment的个人经验
- Android中Fragment的使用
- Android中Fragment的使用
- Android中Fragment的使用
- Android中Fragment的使用
- Android中Fragment的使用
- Android中Fragment的使用
- android checklist
- Android CheckList
- 【Android】Android中fragment的基本使用
- Android中使用Fragment
- Android 中 ViewPager+Fragment关于fragment的数据更新
- android 中Fragment 的简单使用
- Android中ViewPager+Fragment的基本使用
- Android中Fragment+ViewPager的配合使用
- handoop2.0上深度学习解决方案
- C语言之linux内核--BCD码转二进制与二进制转BCD码(笔试经典)
- 逻辑运算符
- unity3D中使用Socket进行数据通信(二)
- C++中的模板
- 【Android】Android中关于Fragment使用的CheckList
- 关于使用数据库的阶段
- Hadoop优化与调整
- 缓存淘汰算法--LRU算法
- 安卓第一夜 第一个应用
- 利用xShell 与linux进行文件互传
- Foundation框架-NSString
- 6.9 Android 支付宝 开发者平台申请和接口调用
- ios类别和继承的区别