实现fragment的懒加载,我的大体思路是:当fragment可见准备好数据的时候,显示当前的fragement。
首先我们来定义一个基本的fragment
/**** * 用于懒加载 *****/public abstract class BaseFrament extends Fragment { PRotected boolean isVisible; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } protected void onVisible(){ lazyLoadData(); } public abstract void lazyLoadData(); protected void onInvisible(){}}在fragment中实现
public class MyOrderFragment extends BaseFrament implements AdapterView.OnItemClickListener { //标志位 标志已经初始化完成 private boolean isPrepared; @BindView(R.id.my_order_viewpager_listview) XListView mMyOrderViewpagerListview; private int pageIndex = 0; private List<MyOrderBean> allList = new ArrayList<>(); private List<MyOrderBean> unPaidList = new ArrayList<>(); private List<MyOrderBean> unShipedList = new ArrayList<>(); private List<MyOrderBean> paidList = new ArrayList<>(); private MyOrderListAdapter allListAdapter; private MyOrderListAdapter unPaidListAdapter; private MyOrderListAdapter unShipedListAdapter; private MyOrderListAdapter paidListAdapter; MyOrderBean order; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.viewpager_my_order, null); ButterKnife.bind(this, view); isPrepared = true; lazyLoadData(); return view; } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {// Tools.toastTools(getActivity(),"点击了item"); if (i > 0) { switch (pageIndex) { case 0: order = allList.get(i - 1); break; case 1: order = unPaidList.get(i - 1); break; case 2: order = unShipedList.get(i - 1); break; case 3: order = paidList.get(i - 1); break; } Intent intent = new Intent(getActivity(), MyOrderDestActivity.class); intent.putExtra("order", order); startActivity(intent); } } @Override public void lazyLoadData() { if (!isPrepared || !isVisible) { return; } pageIndex = this.getArguments().getInt("pages"); switch (pageIndex) { case 0: Tools.toastTools(getActivity(), "全部订单"); if (allList.size() == 0) { //未支付 //网络请求数据 } allListAdapter = new MyOrderListAdapter(getActivity(), allList); mMyOrderViewpagerListview.setAdapter(allListAdapter); break; case 1: Tools.toastTools(getActivity(), "待付款"); if (unPaidList.size() == 0) { } unPaidListAdapter = new MyOrderListAdapter(getActivity(), unPaidList); mMyOrderViewpagerListview.setAdapter(unPaidListAdapter); break; case 2: Tools.toastTools(getActivity(), "待发货"); if (unShipedList.size() == 0) { //未支付 } unShipedListAdapter = new MyOrderListAdapter(getActivity(), unShipedList); mMyOrderViewpagerListview.setAdapter(unShipedListAdapter); break; case 3: Tools.toastTools(getActivity(), "已付款"); if (paidList.size() == 0) { //已支付 } paidListAdapter = new MyOrderListAdapter(getActivity(), paidList); mMyOrderViewpagerListview.setAdapter(paidListAdapter); break; } mMyOrderViewpagerListview.setOnItemClickListener(this); }}新闻热点
疑难解答