Fragment小技巧
2015-10-10 21:20
357 查看
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment
但是,这样会有一个问题 ,应该很多朋友都遇到过:
每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法
那么如何让多个Fragment彼此切换时不重新实例化?
正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需hide()当前,show()另一个。
//之前显示的fragment
private Fragment mContent;
/** 修改显示的内容 不会重新加载 **/
public void switchContent(Fragment to) {
if (mContent != to) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(mContent).add(R.id.content, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(mContent).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
mContent = to;
}
showContent();
}
但是,这样会有一个问题 ,应该很多朋友都遇到过:
每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法
那么如何让多个Fragment彼此切换时不重新实例化?
正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需hide()当前,show()另一个。
//之前显示的fragment
private Fragment mContent;
/** 修改显示的内容 不会重新加载 **/
public void switchContent(Fragment to) {
if (mContent != to) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(mContent).add(R.id.content, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(mContent).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
mContent = to;
}
showContent();
}
相关文章推荐
- Android项目从Eclipse迁移到Android Studio的过程和一些问题汇总
- Python学习二
- [NOIP初赛复习]插空法与插板法解排列组合问题
- 数据结构实习二2
- MediaPlayer无法成功切换歌曲:setDataSource(FileDescriptor fd)的问题
- 屏幕适配的那些坑
- 正则匹配时遇到的编码问题(unicode,gbk,utf-8,中文)
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) C. Bear and Drawing
- Conherence Function
- HDU 5073 Galaxy (贪心)
- JavaScript instanceof 运算符深入剖析【转载】
- Best Practices for AWS Security Using CloudCheckr
- 《Qt on Android核心编程》夹
- 黄金周张家界之行(2)
- hdu4417Super Mario 树状数组+二分
- hadoop之HDFS
- 输出九九乘法表
- 第 二 十 六 天 :DNS 服 务 简 单 配 置
- C++---if(!cin)与if(!(cin >> xxx))
- hdu 1074 doing homework