Fragment 使用hide和show,使用onHiddenChanged代替执行生命周期
来源:互联网 发布:mysql重置初始密码 编辑:程序博客网 时间:2024/05/19 16:49
fragment是我们经常使用到的一个控件,但是,相信大家会出现这样的一个问题,每次切换fragment的时候之前我们一直都是这样写的代码:
/** * 根据传入的参数来改变当前的fragment * * @param fragment */ private void showFragment(Fragment fragment) { FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.layout_content, fragment); transaction.commit(); }
但是这样的写法在需要网络数据时会很消耗用户的数据流量和机器性能,所以我们就正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。(这也是谷歌官方推荐的做法)
/** * 修改显示的内容 不会重新加载 * to 下一个fragment * mContent 当前的fragment */ private void switchContent(Fragment to) { if (mContent != to) { FragmentTransaction transaction = fragmentManager.beginTransaction(); if (!to.isAdded()) { // 判断是否被add过 // 隐藏当前的fragment,将 下一个fragment 添加进去 transaction.hide(mContent).add(R.id.layout_content, to).commit(); } else { // 隐藏当前的fragment,显示下一个fragment transaction.hide(mContent).show(to).commit(); } mContent = to; } }
你会发现使用hide和show这时fragment的生命周期不再执行,不走任何的生命周期,这样在有的情况下,数据将无法通过生命周期方法进行刷新,所以你可以使用onHiddenChanged方法来解决这问题。
@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) { // 不在最前端显示 相当于调用了onPause(); return; }else{ // 在最前端显示 相当于调用了onResume(); //网络数据刷新 } }
接手别人代码今天碰到这问题了,说是切换了数据没有刷新,我一脸懵逼,执行了下生命周期,改成这样这样你就可以单独处理你需要的fragment的数据和ui的刷新了。
阅读全文
0 0
- Fragment 使用hide和show,使用onHiddenChanged代替执行生命周期
- Fragment 使用hide和show,使用onHiddenChanged代替执行生命周期
- Fragment的生命周期,以及fragment用hide和show,以及放在Viewpager中的使用
- fragment hide/show 生命周期
- Fragment 使用add 和 hide 生命周期
- Fragment 使用add 和 hide 生命周期
- 为什么fragment使用hide()和show()而不使用replace()
- Fragment hide/show 切换 走的方法onHiddenChanged(boolean hidden)
- FragMent和RadioButton 使用hide、show数据更新
- Android Fragment使用hide和show方法的问题
- Fragment show和hide
- Fragment的show,add,hide使用
- android fragment onHiddenChanged的使用
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- 搭建Zookeeper服务器集群
- 研发人员应对需求的言与行
- ant使用ssh和linux交互 如:上传文件
- Java中long和Long有什么区别(转)
- 20170605初学笔记之python
- Fragment 使用hide和show,使用onHiddenChanged代替执行生命周期
- iOS自带超强中文分词器
- Android应用程序的安装位置
- 抽象工厂模式(Abstract Factory)
- BFS求多特征点最短路 以及 二维“和数组”
- iOS 【AppStore 上架时由于 ipv6 原因被拒】
- Python装饰器学习
- mybatis -----attempted to return null from a method with a primitive return type (int)
- 关于Vmware虚拟机三种网络模式详解