package in.srain.cube.demo.ui.loadmore; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ListView; import in.srain.cube.demo.R; import in.srain.cube.demo.base.DemoTitleBaseFragment; import in.srain.cube.demo.data.ImageListItem; import in.srain.cube.demo.datamodel.ImageListDataModel; import in.srain.cube.demo.event.DemoSimpleEventHandler; import in.srain.cube.demo.event.ErrorMessageDataEvent; import in.srain.cube.demo.event.EventCenter; import in.srain.cube.demo.event.ImageListDataEvent; import in.srain.cube.demo.ui.viewholders.ImageListItemSmallImageViewHolder; import in.srain.cube.image.ImageLoader; import in.srain.cube.image.ImageLoaderFactory; import in.srain.cube.util.LocalDisplay; import in.srain.cube.views.list.PagedListViewDataAdapter; import in.srain.cube.views.loadmore.LoadMoreContainer; import in.srain.cube.views.loadmore.LoadMoreHandler; import in.srain.cube.views.loadmore.LoadMoreListViewContainer; import in.srain.cube.views.ptr.PtrDefaultHandler; import in.srain.cube.views.ptr.PtrFrameLayout; import in.srain.cube.views.ptr.PtrHandler; public class LoadMoreListViewFragment extends DemoTitleBaseFragment { private PagedListViewDataAdapter<ImageListItem> mAdapter; private ImageListDataModel mDataModel; private ImageLoader mImageLoader; private PtrFrameLayout mPtrFrameLayout; private ListView mListView; @Override public View createView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { setHeaderTitle(R.string.cube_demo_load_more_list_view); mImageLoader = ImageLoaderFactory.create(getContext()).attachToCubeFragment(this); // set up data mDataModel = new ImageListDataModel(5); mAdapter = new PagedListViewDataAdapter<ImageListItem>(); mAdapter.setViewHolderClass(this, ImageListItemSmallImageViewHolder.class, mImageLoader); mAdapter.setListPageInfo(mDataModel.getListPageInfo()); // set up views final View view = inflater.inflate(R.layout.fragment_load_more_list_view, null); // pull to refresh mPtrFrameLayout = (PtrFrameLayout) view.findViewById(R.id.load_more_list_view_ptr_frame); mPtrFrameLayout.setLoadingMinTime(1000); mPtrFrameLayout.setPtrHandler(new PtrHandler() { @Override public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) { // here check list view, not content. return PtrDefaultHandler.checkContentCanBePulledDown(frame, mListView, header); } @Override public void onRefreshBegin(PtrFrameLayout frame) { mDataModel.queryFirstPage(); } }); // list view mListView = (ListView) view.findViewById(R.id.load_more_small_image_list_view); // header place holder View headerMarginView = new View(getContext()); headerMarginView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LocalDisplay.dp2px(20))); mListView.addHeaderView(headerMarginView); // load more container final LoadMoreListViewContainer loadMoreListViewContainer = (LoadMoreListViewContainer) view.findViewById(R.id.load_more_list_view_container); loadMoreListViewContainer.useDefaultHeader(); // binding view and data mListView.setAdapter(mAdapter); loadMoreListViewContainer.setLoadMoreHandler(new LoadMoreHandler() { @Override public void onLoadMore(LoadMoreContainer loadMoreContainer) { mDataModel.queryNextPage(); } }); // process data EventCenter.bindContainerAndHandler(this, new DemoSimpleEventHandler() { public void onEvent(ImageListDataEvent event) { // ptr mPtrFrameLayout.refreshComplete(); // load more loadMoreListViewContainer.loadMoreFinish(mDataModel.getListPageInfo().isEmpty(), mDataModel.getListPageInfo().hasMore()); mAdapter.notifyDataSetChanged(); } public void onEvent(ErrorMessageDataEvent event) { loadMoreListViewContainer.loadMoreError(0, event.message); } }).tryToRegisterIfNot(); // auto load data mPtrFrameLayout.postDelayed(new Runnable() { @Override public void run() { mPtrFrameLayout.autoRefresh(false); } }, 150); return view; } }