Android中Fragment添加容易遇到的问题
来源:互联网 发布:证书服务器开放的端口 编辑:程序博客网 时间:2024/06/07 08:09
一.遇到的问题:Fragment和tab不协调工作
在这里就不到Fragment进行介绍了,网上到处都是,现在就说一下我遇到的一个问题,在开发中有时会需要对Fragment进行添加,但是很多时候我们不希望一开始就添加我们手里所有的Fragment,所以我们开始的时候会用transaction.add,或者transaction.replace对Fragment进行添加,对已经添加的Fragment我们通常使用transaction.hide和transaction.show方法进行隐藏和展示,当然也可以在Fragment中用对布局是否为空来判断是否在onCreateView中进行重新绘制。这样可以避免我们重复的加载Fragment中的资源,特别是当你的Fragment中有许多的网络请求或者是耗时操作,而你并不需要在每次切换到这个Fragment中都去调用这些方法去初始化,那么你就应该考虑避免去重复添加Fragment。
刚才讲的都是真正问题的引子,因为当你在添加Fragment时候,通常你会有底部的tab来和你的Fragment进行呼应,你的tab可能是自定义的,也可能是FragmentTabHost也可能是RadioButton。但是当你的应用程序因为内存过大,而且长时间处于后台等原因,内存被系统回收的时候,当你再次将你的应用从后台调回来的时候你就会发现你的Fragment很有可能和你的tab协调不起来了,可能你点击第一个tab可是界面展示的永远是第二个tab的Fragment,界面并没有因为你底部tab的改变而改变。这是因为你的内存被回收后,你的Fragment在栈中也被回收了,当前的activity不再持有Fragment的状态。这个时候你需要在onCreate方法中对Fragment的状态进行一下保存:
@Override protected void onCreate(Bundle savedInstanceState) { if(savedInstanceState == null){ fragment1 = new Fragment1(); fragment2 = new Fragment2(); }else{ /**为空的时候我们重新创建Fragment对象,也就是我们第一次启动应用的时候,当不为空的时候,我们创建过,但是因为被系统回收等原因,我们只能从我们保存的状态中找回,这样可以保证我们的程序回复到以前*/ fragment1 = getSupportFragmentManager().findFragmentByTag("first"); fragment2 = getSupportFragmentManager().findFragmentByTag("second"); } }
这样我们就可以使我们的程序在被系统回收内存之后回来仍然能够让Fragment和tab正常工作,很多时候你不做这种处理也不会出问题,但是当你经过大量的测试的时候,当使用场景增加的时候你就会发现这些问题,特别是你的程序存在内存泄漏的时候,所以我建议这个地方还是要加上这种处理为好。
1 0
- Android中Fragment添加容易遇到的问题
- Android中使用Fragment遇到的问题
- android Fragment中遇到的问题
- toml使用中容易遇到的问题
- android编程中容易遇到的若干问题
- android编程中容易遇到的若干问题
- Android进阶__Fragment中嵌套Fragment遇到的问题
- Android Fragment使用中遇到的几点问题
- android开发环境搭建中容易遇到的问题和疑惑
- Android中使用ViewPager+Fragment动态删除添加Fragment问题
- Android Studio导入别人项目容易遇到的问题
- VS2008中容易遇到的3个问题之解决办法
- 代码调试过程中容易遇到的问题
- 在移动端开发中,容易遇到的问题集合。
- js 开发进阶之 开发中容易遇到的问题
- Fragment使用容易忽视的问题
- 开发中遇到Fragment中onActivityResult不响应的问题,
- 容易遇到的问题之word07问题
- 两个editText相互监听的死循环问题
- 关于apktool反编译出错Error occured at code address 0的解决办法
- Ubuntu,Mac安装go
- TCP协议发送和接受文本消息
- Android学习-JAVA基础 (一)
- Android中Fragment添加容易遇到的问题
- API测试利器——Postman(1. 安装和启动)
- vs2008 warning4390
- HTTP协议详解
- 正则表达式
- Ubuntu14.04安装nginx稳定版本步骤
- Activity的启动模式
- inflate方法与findViewById的区别
- 关于 自己遇到的内存溢出问题