一、Fragment+RadioGroup
??在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment:然后总感觉切换的时候有些卡顿。
1、以前的代码:
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkID) {
switch (checkID) {
case R.id.rabt01:
if (searchFragment == null) {
searchFragment = new SearchFragment();
getSupportFragmentManager().beginTransaction().hide().add(R.id.linnerlayout, searchFragment).commit();
}
break;
case R.id.rabt02:
downFragment = new DownFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.linnerlayout, downFragment).commit();
break;
case R.id.rabt03:
listenFragment = new ListenFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.linnerlayout, listenFragment).commit();
break;
case R.id.rabt04:
myFragment = new MyFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.linnerlayout, myFragment).commit();
break;
}
}
});
2、原因分析:
??因为replace每次都会重新调用fragment的onCreateView()方法,浪费时间。
3、解决方法:
??正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。这样就不会重复调用onCreateView函数了。
??FragmentTransactioin 可以用来添加,删除fragment,也可以控制fragment的显示和隐藏。
??这是如果调用addToBackStack(null),此时的状态就会被保存在回退栈,按返回键的时候就会显示出栈顶的。
Android 优化Fragment防止页面多次inflate:http://www.th7.cn/Program/Android/201411/311607.shtml
4、代码改进
在不同Fragment之间切换的方法:http://www.th7.cn/Program/Android/201503/408512.shtml
需要维护一个全局的变量来记录当前的fragment。另外需要做一些判断,可以提取成方法的。
对Fragment切换的优化:http://www.tuicool.com/articles/iEfIvqb
二、ViewPager+Fragment
Fragment的陷阱:http://mobile.51cto.com/abased-446691.htm
关于fragment+viewpager的优化:http://www.bubuko.com/infodetail-648897.html
时间: 2024-12-24 12:44:00