Fragment缓存并防止内存泄露

2017-01-09  本文已影响382人  h4de5
tablayout切换有什么好的办法不销毁加载好的内容吗?

一般我们使用TabLayout切换Fragment中展示内容,既然不销毁加载好的内容,那就是不销毁Fragment就能实现了。
不销毁Fragment就是对已经存在的Fragment进行缓存
传统的java方法存储一个唯一的对象采用HashMap,但是Google用SparseArray替代HashMap来提高效率。

public class FragmentFactory {
private static SparseArray<Fragment> map = new SparseArray<Fragment>();
public static Fragment getFragment(int position) {
Fragment fragment = null;
if (map.get(position, fragment) != null) {
return map.get(position);
}
switch (position) {
case 0:
fragment = new NewsFragment();
break;
case 1:
fragment = new ToolsFragment();
break;
case 2:
fragment = new ZhihuDailyFragment();
break;
case 3:
fragment = new AboutFragment();
break;
}
map.put(position, fragment);
return fragment;
}
}

这里是根据position进行缓存 ,position一般就是TabLayout的子Tab的序号或者ViewPager的Postion位置。

public class FragmentFactory {
private static FragmentFactory mFactory = null;
public static FragmentFactory getInstatic() {
if (mFactory == null) {
mFactory = new FragmentFactory();
}
return mFactory;
}
public Fragment getFragment(int position) {
SparseArray<Fragment> map = new SparseArray<Fragment>();
Fragment fragment = null;
if (map.get(position, fragment) != null) {
return map.get(position);
}
switch (position) {
case 0:
fragment = new NewsFragment();
break;
case 1:
fragment = new ToolsFragment();
break;
case 2:
fragment = new ZhihuDailyFragment();
break;
case 3:
fragment = new AboutFragment();
break;
}
map.put(position, fragment);
return fragment;
}
}
上一篇 下一篇

猜你喜欢

热点阅读