Android Fragment使用问题集结
来源:互联网 发布:英国网络运营商 编辑:程序博客网 时间:2024/05/21 05:58
1、FragmentManager问题
问题描述:
使用FragmentManager管理Fragment的时候,如果调用FragmentTransaction的replace方法(实际上是先调用add()然后再调用remove()),那么Fragment就会被销毁然后重新创建。
这样导致几个问题:1、Fragment重新实例化,里面的状态无法保存。
2、网络应用的情况下,Fragment重新实例化要重新请求数据,消耗多余流量。
3、重新实例化需要消耗时间,用户体验下降
解决方法:
使用hide()、show()方法进行fragment的显示与隐藏。这种方案需要消耗内存空间作为代价换取时间和体验。
关键代码片段
public void switchFragment(Fragment from, Fragment to) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (!to.isAdded()) { // 先判断是否被add过 transaction.hide(from).add(R.id.fragment_container, to).commit(); // 隐藏当前的fragment,add下一个到Activity中 } else { transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个 } }
2、Fragment里面嵌套Fragment
问题描述:
- 很多手机应用都会有两层Fragment的嵌套,第一层是框架层的界面,一个Tab对应一个Fragment;第二层是某一个Tab下的Fragment里面又有多个Tab,每个Tab又对应一个Fragment,这个时候就要区分FragmentManager的获取方式了。如果使用不当,那么第二层下的Fragment就会出现数据错乱、不一致的问题。
getFragmentManager():该方法是获取管理第一层Tab的FragmentManager;是Activity界面下的Fragment管理。
getChildFragmentManager():该方法是获得Fragment下的第二层Tab的管理FragmentManager;是Fragment下的子Fragment管理。
解决方案:
Activity下的一级Tab,对应的使用getFragmentManager()来管理Fragment;
Fragment下的次级Tab,对应使用getChildFragmentManager()来管理子Fragment。
TabLayout+ViewPager+Fragment使用
问题描述
- 自定义Tab:TabLayout与ViewPager关联的时候,默认会调用View中的PagerAdapter的getPageTitle()的方法来创建Tab,与ViewPager关联之后Tab是由框架创建,我们无法自定义创建。
解决方法
在setUpWithViewPager()调用之后,获取TabLayout中的每一个Tab,调用Tab的setCustomeView()方法用我们自定义的View替换掉原来的View即可。
关键代码
//必须先调用ViewPager.setAdaptermViewPager.setAdapter(adapter);mTabLayout.setupWithViewPager(mViewPager,false);private void initTabView(String[] titles,KartinaFragmentPageAdapter adapter){ for(int i = 0; i < titles.length; i++){ TabLayout.Tab tab = mTabLayout.getTabAt(i); if (tab != null) tab.setCustomView(adapter.getTabView(i)); } }
0 0
- Android Fragment使用问题集结
- Android开发问题集结贴
- android 平台开发问题集结
- Android 集结
- android 使用fragment切换,出现fragment重叠的问题
- Android中使用ViewPager+Fragment动态删除添加Fragment问题
- android 使用Fragment的一点问题
- Android Fragment嵌套使用问题总结
- Android中使用Fragment遇到的问题
- [Android] Fragment 中使用 getLayoutInflater() 的问题
- SSh框架问题集结
- SSH框架问题集结
- OpenCV问题集结版
- 问题集结(一)
- 问题集结(二)
- 问题集结(三)
- 数据结构学习问题集结
- Android知识点集结
- 第6天
- ELK技术栈实践(一)
- 对i++和++i的理解
- windows配置MySql服务
- 专业名词------专业!
- Android Fragment使用问题集结
- Caused by: java.util.EmptyStackException
- CAN、I2C、SPI总线简介
- Arduino Uno资料简介
- spring mvc 请求转发和重定向
- tabcell居中
- Effective Java(Item: 23 to 37)
- 用Pygame绘制圆程序
- oracle 表结构和表操作