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.AdapterView; import in.srain.cube.demo.R; import in.srain.cube.demo.base.DemoTitleBaseFragment; import in.srain.cube.demo.event.ErrorMessageDataEvent; import in.srain.cube.demo.event.ImageListDataEvent; 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.EventCenter; import in.srain.cube.demo.ui.viewholders.ImageListItemMiddleImageViewHolder; import in.srain.cube.image.ImageLoader; import in.srain.cube.image.ImageLoaderFactory; import in.srain.cube.util.CLog; import in.srain.cube.util.LocalDisplay; import in.srain.cube.views.GridViewWithHeaderAndFooter; import in.srain.cube.views.list.PagedListViewDataAdapter; import in.srain.cube.views.loadmore.LoadMoreContainer; import in.srain.cube.views.loadmore.LoadMoreGridViewContainer; import in.srain.cube.views.loadmore.LoadMoreHandler; import in.srain.cube.views.ptr.PtrDefaultHandler; import in.srain.cube.views.ptr.PtrFrameLayout; import in.srain.cube.views.ptr.PtrHandler; import in.srain.cube.views.ptr.header.MaterialHeader; public class LoadMoreGridViewFragment extends DemoTitleBaseFragment { private PagedListViewDataAdapter<ImageListItem> mAdapter; private ImageListDataModel mDataModel; private ImageLoader mImageLoader; private PtrFrameLayout mPtrFrameLayout; private GridViewWithHeaderAndFooter mGridView; @Override public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHeaderTitle(R.string.cube_demo_load_more_grid_view); mImageLoader = ImageLoaderFactory.create(getContext()).attachToCubeFragment(this); // set up data mDataModel = new ImageListDataModel(8); mAdapter = new PagedListViewDataAdapter<ImageListItem>(); mAdapter.setViewHolderClass(this, ImageListItemMiddleImageViewHolder.class, mImageLoader); mAdapter.setListPageInfo(mDataModel.getListPageInfo()); // set up views final View view = inflater.inflate(R.layout.fragment_load_more_grid_view, null); // pull to refresh mPtrFrameLayout = (PtrFrameLayout) view.findViewById(R.id.load_more_grid_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, mGridView, header); } @Override public void onRefreshBegin(PtrFrameLayout frame) { mDataModel.queryFirstPage(); } }); mGridView = (GridViewWithHeaderAndFooter) view.findViewById(R.id.load_more_grid_view); mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { CLog.d("grid-view", "onItemClick: %s %s", position, id); } }); // header place holder View headerMarginView = new View(getContext()); headerMarginView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LocalDisplay.dp2px(20))); mGridView.addHeaderView(headerMarginView); // load more container final LoadMoreGridViewContainer loadMoreContainer = (LoadMoreGridViewContainer) view.findViewById(R.id.load_more_grid_view_container); loadMoreContainer.setAutoLoadMore(false); loadMoreContainer.useDefaultHeader(); // binding view and data mGridView.setAdapter(mAdapter); loadMoreContainer.setLoadMoreHandler(new LoadMoreHandler() { @Override public void onLoadMore(LoadMoreContainer loadMoreContainer) { mDataModel.queryNextPage(); } }); // data EventCenter.bindContainerAndHandler(this, new DemoSimpleEventHandler() { public void onEvent(ImageListDataEvent event) { // ptr refresh complete mPtrFrameLayout.refreshComplete(); // load more complete loadMoreContainer.loadMoreFinish(mDataModel.getListPageInfo().isEmpty(), mDataModel.getListPageInfo().hasMore()); mAdapter.notifyDataSetChanged(); } public void onEvent(ErrorMessageDataEvent event) { loadMoreContainer.loadMoreError(0, event.message); } }).tryToRegisterIfNot(); // auto load data mPtrFrameLayout.postDelayed(new Runnable() { @Override public void run() { mPtrFrameLayout.autoRefresh(false); } }, 150); return view; } }