fragment只有第一次加载数据其他时候不加载更新数据也就是说在fragment创建的时候加载数据,其他生命周期都加载数据。
这种情况下,考虑使用hide和show来实现。可是hide和show的时候,一般情况下是都已经把fragment都事先加入add了。
问题来了,事先加入后是把所有的fragment都提前创建好加载数据了,看不到的fragment也会执行,造成浪费。
解决办法:
1.一开始加载一个fragment
2.切换fragment 的时候fragment存在就不执行生命周期不加载数据,不存在是创建fragment执行生命周期加载数据
3.切换同一个fragment时不做进一步操作
思路有了,接下来编写代码:
Fragment currentFragment;
private void changeFragment(Fragment changeFragment , id layout){
if(changeFragment==null)return;
if(changeFragment==currentFragment) return;
FragmentTransaction ft = getSupportFragmentManager() .beginTransaction();
if(!changeFragment.isAdded){
ft.add(changeFragment);
}
ft.hide(currentFragment);
ft.show(changeFragment);
ft.commit();
currentFragment=changeFragment;
}