多个Fragment在屏幕翻转会重影问题的解决
2015-09-27 14:59
369 查看
fragment使用add和hide而不用replace的方法添加到activity中,如果屏幕翻转可能会又add新的fragment进去,所以会重影。
如果有一个sparsearray保存fragment,那么在初始化的时候就应该用
不直接append新的fragment,而是通过fragmentsupportmanager先检查有没有已有的fragment,这样就可以解决重影问题。
需要注意的是:setRetainInstance(true)必须设置,这样fragment才不会在manager中销毁,替换fragment后想修改数据才不会出现nullpointerexception错误
如果有一个sparsearray保存fragment,那么在初始化的时候就应该用
private void initFragment(Bundle savedInstanceState) { //set up fragments // fragments.append(MAIN_INDEX, MainFragment.newInstance()); // fragments.append(SUCCESS_INDEX, SuccessFragment.newInstance()); // fragments.append(FAILED_INDEX, FailedFragment.newInstance()); // fragments.append(NONE_INDEX, NoneFragment.newInstance()); fragments = new SparseArray<>(); //Main Fragment Fragment mainFragment = getSupportFragmentManager().findFragmentByTag(String.valueOf(MAIN_INDEX)); if (mainFragment == null) { mainFragment = MainFragment.newInstance(); } fragments.append(MAIN_INDEX, mainFragment); //Success Fragment Fragment succcessFragment = getSupportFragmentManager().findFragmentByTag(String.valueOf(SUCCESS_INDEX)); if (succcessFragment == null) { succcessFragment = SuccessFragment.newInstance(); } fragments.append(SUCCESS_INDEX, succcessFragment); //Failed Fragment Fragment failedFragment = getSupportFragmentManager().findFragmentByTag(String.valueOf(FAILED_INDEX)); if (failedFragment == null) { failedFragment = FailedFragment.newInstance(); } fragments.append(FAILED_INDEX, failedFragment); //none Fragment Fragment noneFragment = getSupportFragmentManager().findFragmentByTag(String.valueOf(NONE_INDEX)); if (noneFragment == null) { noneFragment = NoneFragment.newInstance(); } fragments.append(NONE_INDEX, noneFragment); //add to activity for (int i = 0; i < fragments.size(); i++) { Fragment f = fragments.valueAt(i); if (!f.isAdded()) getSupportFragmentManager() .beginTransaction() .add(R.id.container, f, String.valueOf(fragments.keyAt(i))) .hide(f) .commit(); } }
不直接append新的fragment,而是通过fragmentsupportmanager先检查有没有已有的fragment,这样就可以解决重影问题。
需要注意的是:setRetainInstance(true)必须设置,这样fragment才不会在manager中销毁,替换fragment后想修改数据才不会出现nullpointerexception错误
相关文章推荐
- 控件的使用
- [LeetCode]171 Excel Sheet Column Number
- LeetCode之Palindrome Partitioning
- 对类的继承
- Hadoop Linux下txt文件乱码
- "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"的分析
- 堆二叉树
- <网络编程培训之一> 编程实现IP/TCP/UDP报文
- 机器学习中的常见问题——几种梯度下降法
- AlgorithmsI Programming Assignment 1: PercolationStats.java
- Java基础知识强化98:Apache和Tomcat服务器的联系与区别
- 实战MHA部署、高可用测试
- 黑马程序员——C语言基础---分支结构
- 黑马程序员---java基础---代码块及继承
- B树、B+树的区别
- angularjs的基础
- 必应词典
- 黑马程序员——C语言日志——宏定义#define
- Java中常量和静态变量区别详解
- 停车场管理系统界面设计(Net Beans)用到的代码