Framgment未添加则添加,已添加则通过显示隐藏控制代码
来源:互联网 发布:学士后java 编辑:程序博客网 时间:2024/06/05 12:47
需求:首页有四个tab,点击哪个就显示哪个
最初实现是先全部添加进去,然后通过点击来控制hide,和show,但是这种话方法有个不足,就是初次进入应用一次性全部加载数据,用户体验不好,且一次性加载太消耗资源了,主要不刷新,于是考虑的replece方法,repleace方法的缺点也和明显,就是每次都要destory和create,也相当消耗资源,虽然重新创建数据显示会刷新
解决方法:
初次点击先判断有无添加,记录下当前的position,命名为oldPosition第二次点击的时候,拿到最新的 position,命名为currentPosition进行对比,如果两个position不一样,则判断currentPosition对应的fragment有没有添加,如果没添加,则添加,添加了就直接show出来,commit下,最后把currentPosition赋值给oldPosition
SHOW CODE
public void changeFragment( int currentPosition) { fm= getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); if (currentPosition != oldSelectIndex) { fragmentTransaction.hide(mFragments[oldSelectIndex]); if (!mFragments[currentPosition].isAdded()) { fragmentTransaction.add(R.id.frame_content, mFragments[currentPosition]); } fragmentTransaction.show(mFragments[currentPosition]); fragmentTransaction.commit(); } oldSelectIndex = currentPosition; }
以上是主要代码
全部步骤:
- 在Activity中把四个fragment都实例化出来,创建一个存放fragment的数组,把四个fragment添加进去
Fragment[] mFragments=new Fragment[4];
mFragments[0]=mDescFragment; mFragments[1]=mMaterialFragment; mFragments[2]=mClassRoomFragment; mFragments[3]=mChatFragment;
初始化的时候,默认添加第一个fragment
fm = getSupportFragmentManager(); FragmentTransaction Transaction = fm.beginTransaction(); Transaction.add(R.id.frame_content, mDescFragment) .commit();
点击不同的tab,index变化从0开始依次,index=0,index=1,index=2。index=3,传入changeFragment中作为参数
mIndex = 0; changeFragment(mIndex);
值得注意的问题
FragmentTransaction不能声明为全局变量,是能commit一次,不然会报is alread commit错误,oldPosition和index都要初始化为0
0 0
- Framgment未添加则添加,已添加则通过显示隐藏控制代码
- 为Group添加网格线, 控制隐藏与显示
- js控制显示和隐藏 jquery赋值与添加事件
- 右键添加[显示、隐藏文件]
- angularjs的添加,显示隐藏
- 通过JavaScript代码实现 标题的控制+添加信息
- 如何通过代码添加ChildViewController
- KeyWindow上添加子视图未显示
- 添加超链接缩略图显示代码
- 隐藏/显示“添加删除程序”的软件
- 添加 右键显示隐藏文件+扩展名
- 使用复选框添加显示隐藏层
- django admin字段 添加显示隐藏效果
- 右键添加显示隐藏文件夹功能
- UIScrollView添加手势显示和隐藏键盘
- angular的添加隐藏于显示
- java批量添加已完成代码备注
- WPF listbox 的datatemplate中添加触发器,控制template中某个按钮的显示隐藏
- 《JS高程(3)》-第6章笔记(03)
- LNMP自定义安装教程
- linux--redis的安装和配置和开启多个端口
- linux下mysql的卸载、安装全过程
- Eclipse背景颜色修改
- Framgment未添加则添加,已添加则通过显示隐藏控制代码
- CNN(卷积神经网络)
- html bootstrap框架 extjs树形iframe嵌入
- simulink中s-function使用
- 【word | html】word(doc | docx) 转 html
- HTC VIVE的交互(凝视,瞬移,发出射线)
- Windows下Ionic Android开发环境搭建
- [BZOJ3879]SvT(后缀数组+单调栈)
- iOS UITextField限制输入长度