怎么让Fragment 切换时不重新执行生命周期的方法

 我来答
ok心心抱抱
2017-01-11 · TA获得超过110个赞
知道小有建树答主
回答量:1307
采纳率:0%
帮助的人:300万
展开全部
很快聪明的你就会发现fragment的生命周期怎么不走了?onPause方法怎么不调用了?onResume怎么只调用一次了?
这时此时方法 onHiddenChanged派上用场了,当fragment隐藏时,该方法会调用传入参数为true表示该fragment被隐藏了,当fragment调用了show方法后,该方法传入的参数为false,表示该fragment正在显示!
所以总结起来,如果使用hide/show方法来控制fragment的使用时,原本需要在onResume以及onPause方法做的事情就可以迁移到 onHiddenChanged时进行管理,如:
if (hidden) {// 不在最前端界面显示 AA.onPause(); } else {// 重新显示到最前端中 BB.onResume(); }

可以自行做个demo测试,下面贴出完整的生命周期:
七鑫易维信息技术
2024-09-02 广告
Play Video 七鑫易维是致力于机器视觉和人工智能领域的高新科技企业,迄今已专注眼球追踪技术的研发、创新与应用超过14年,拥有完全自主知识产权,全球专利总量655余项。 作为眼球追踪技术领域的全球知名品牌,七鑫易维的产品体系覆盖眼动分... 点击进入详情页
本回答由七鑫易维信息技术提供
盘石Yun
2017-01-11 · TA获得超过121个赞
知道小有建树答主
回答量:273
采纳率:0%
帮助的人:121万
展开全部
fragment是我们经常使用到的一个控件,但是,相信大家会出现这样的一个问题,每次切换fragment的时候,fragment就会重新调用一次生命周期的方法,从而会重新加载一次数据,这样既消耗用户的数据流量和机器性能;
现在就教大家一个方法,来解决这个问题; 之前我们一直都是这样写的代码:
/**
* 根据传入的参数来改变当前的fragment
*
* @param fragment
*/
private void showFragment(Fragment fragment) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_fl_content, fragment);
transaction.commit();
}1234567891012345678910

翻看了Android官方文档,发现,replace()这个方法只是在上一个Fragment不再需要使用时采用的简便方法。正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。(这也是谷歌官方推荐的做法)
/**
* 修改显示的内容 不会重新加载
* to 下一个fragment
* mContent 当前的fragment
*/
private void switchContent(Fragment to) {
if (mContent != to) {
FragmentTransaction transaction = fragmentManager
.beginTransaction().setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out);
if (!to.isAdded()) { // 判断是否被add过
// 隐藏当前的fragment,将 下一个fragment 添加进去
transaction.hide(mContent).add(R.id.main_fl_content, to).commit();
} else {
// 隐藏当前的fragment,显示下一个fragment
transaction.hide(mContent).show(to).commit();
}

mContent = to;
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式