Fragment懒加载可解决如下:一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而每个Fragment都需要去加载数据,或从本地加载、或从网络加载,那么在Activty刚创建的时候就会初始化大量的资源,会变得卡慢。Fragment可见时,才执行加载数据的操作,即Fragment的懒加载,setUserVisibleHint判断是否可见。
public abstract class LazyFragment extends Fragment {
14. protected boolean isVisible;
15. /**
16. * 在这里实现Fragment数据的缓加载.
17. * @param isVisibleToUser
18. */
19. @Override
20. public void setUserVisibleHint(boolean isVisibleToUser) {
21. super.setUserVisibleHint(isVisibleToUser);
22. if(getUserVisibleHint()) {
23. isVisible = true;
24. onVisible();
25. } else {
26. isVisible = false;
27. onInvisible();
28. }
29. }
30.
31. protected void onVisible(){
32. lazyLoad();
33. }
34.
35. protected abstract void lazyLoad();
36.
37. protected void onInvisible(){}
38.}
public class OpenResultFragment extends LazyFragment{
02. // 标志位,标志已经初始化完成。
03. private boolean isPrepared;
04.
05. @Override
06. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
07. Log.d(LOG_TAG, "onCreateView");
08. View view = inflater.inflate(R.layout.fragment_open_result, container, false);
09. //XXX初始化view的各控件
10. isPrepared = true;
11. lazyLoad();
12. return view;
13. }
14.
15. @Override
16. protected void lazyLoad() {
17. if(!isPrepared || !isVisible) {
18. return;
19. }
20. //填充各控件的数据
21. }
22.
23.}