Android fragment 切换加载数据卡顿问题
2015-07-21 11:05
441 查看
接着上一篇项目的进度,上一篇讲了如何利用fragment来实现下拉菜单,公用菜单,以实现切换主界面数据的功能,这时候遇到的问题是:使用了fragment的切换界面方法,但加载的数据太多,用户从一个界面切换到这个界面的时候,至少有一两秒的卡顿,这是无法忍受的,代码如下:
翻看了Android官方Doc,和一些组件的源代码,发现,replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。
正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
这样就能做到多个Fragment切换不重新实例化:
由于是公司项目,不能上传整个工程文件,不过可以参考一下我的解决方式,有同样的问题的同学可以交流一下还有没有更优雅的解决办法。
private void initOpenMenuItem(View popupWindow_view) { DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view .findViewById(R.id.menu_price); menu_price.setOnClickListener(new OnClickListener() { FragmentTransaction transaction; @Override public void onClick(View v) { transaction = manager.beginTransaction(); transaction.replace(R.id.fragment_container, priceFragment); titleView.setText(priceFragment.getFragmentTitle()); transaction.commit(); popupWindow.dismiss(); } }); }上述代码在切换fragment界面的时候,根据fragment的方法api,replace是要重新生成实例的,这就势必导致数据重新加载,我们必须得采取隐藏的方式或者加一个进度条来缓解。这里我采用的是fragment提供的hide方法,来实现数据的快速显示,修改代码如下:
private void initOpenMenuItem(View popupWindow_view) { DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view .findViewById(R.id.menu_price); menu_price.setOnClickListener(new OnClickListener() { FragmentTransaction transaction; @Override public void onClick(View v) { transaction = manager.beginTransaction(); /* * qiulinhe:2015年7月21日10:54:51 * 解决切换卡顿的问题 */ if (!priceFragment.isAdded()) { // 先判断是否被add过 transaction.hide(openPositionFragment).add(R.id.fragment_container, priceFragment).commit(); // 隐藏当前的fragment,add下一个到Activity中 titleView.setText(priceFragment.getFragmentTitle()); } else { transaction.hide(openPositionFragment).show(priceFragment).commit(); // 隐藏当前的fragment,显示下一个 titleView.setText(priceFragment.getFragmentTitle()); }</span> popupWindow.dismiss(); } }); }原理就是:
翻看了Android官方Doc,和一些组件的源代码,发现,replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。
正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
这样就能做到多个Fragment切换不重新实例化:
由于是公司项目,不能上传整个工程文件,不过可以参考一下我的解决方式,有同样的问题的同学可以交流一下还有没有更优雅的解决办法。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories