关于Fragment的显示和隐藏 类似淘宝加载
Fragment管理办法
1:利用FragmentManager管理
2:利用ViewPager管理
两种情况下Fragment显示/隐藏的方法
1:FragmentManager中,add/show,调用onHiddenChanged(boolean)
2:ViewPager中,setCurrentItem,调用setUserVisibleHint(boolean)
不要混用,不要混用,不要混用
FragmentManager 情况下的坑
Fragment首次创建不会调用onHiddenChanged
FragmentManager add 一次,就会调用onCreat+onResume
乱七八糟,如何清晰?
解决办法
如果你的主Activity中,用的是FragmentManager,管理5个内容巨多的Fragment,参考淘宝
你又想实现那么省性能,最好的方式
1:当点击HomeActity中的Tab时,首先
case 1:
case 2:
if ( fg2== null) {
fg2 = new Fragment02();
fragmentTransaction.add(R.id.content, fg2);
} else {
fragmentTransaction.show(fg2);
}
break;
case3:
case4:
case5:
.....
2:然后在每个Fragment中,
//避免你的activity生命周期影响它
private boolean canLoad=false,needLoad=true;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(rootView!=null){
return rootView;
}else {
rootView = inflater.inflate(R.layout.fg02, null);
//去各种findviewbyid操作
canLoad=true;
return rootView;
}
}
@Override
public void onResume(){
super.onResume();
if(canLoad&&needLoad){
//这里写首次展示的操作,比如setAdapter,网络请求等
needLoad=false;
}
}
@Override
public void onHiddenChanged(boolean hidden) {
//这里写每次页面隐藏/显示 你需要进行的操作,比如刷新 等
if (hidden) {
//TODO 被隐藏
} else {
//TODO 被展示
}
}