package com.yuzhi.fine.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.squareup.picasso.Picasso; import com.yuzhi.fine.R; import com.yuzhi.fine.activity.MainActivity; import com.yuzhi.fine.http.HttpClient; import com.yuzhi.fine.http.HttpResponseHandler; import com.yuzhi.fine.http.RestApiResponse; import com.yuzhi.fine.model.SearchParam; import com.yuzhi.fine.model.SearchShop; import com.yuzhi.fine.ui.UIHelper; import com.yuzhi.fine.ui.loadmore.LoadMoreListView; import com.yuzhi.fine.ui.quickadapter.BaseAdapterHelper; import com.yuzhi.fine.ui.quickadapter.QuickAdapter; import com.yuzhi.fine.utils.DeviceUtil; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import in.srain.cube.views.ptr.PtrClassicFrameLayout; 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.StoreHouseHeader; import okhttp3.Request; /** * Created by tiansj on 15/9/4. */ public class DemoPtrFragment extends Fragment { private MainActivity context; private SearchParam param; private int pno = 1; private boolean isLoadAll; @Bind(R.id.rotate_header_list_view_frame) PtrClassicFrameLayout mPtrFrame; @Bind(R.id.listView) LoadMoreListView listView; QuickAdapter<SearchShop> adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_demo_ptr, container, false); ButterKnife.bind(this, view); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); context = (MainActivity) getActivity(); initData(); initView(); loadData(); } void initView() { adapter = new QuickAdapter<SearchShop>(context, R.layout.recommend_shop_list_item) { @Override protected void convert(BaseAdapterHelper helper, SearchShop shop) { helper.setText(R.id.name, shop.getName()) .setText(R.id.address, shop.getAddr()) .setImageUrl(R.id.logo, shop.getLogo()); // 自动异步加载图片 } }; listView.setDrawingCacheEnabled(true); listView.setAdapter(adapter); // header custom begin final StoreHouseHeader header = new StoreHouseHeader(context); header.setPadding(0, DeviceUtil.dp2px(context, 15), 0, 0); header.initWithString("Fine"); header.setTextColor(getResources().getColor(R.color.gray)); mPtrFrame.setHeaderView(header); mPtrFrame.addPtrUIHandler(header); // header custom end // 下拉刷新 mPtrFrame.setLastUpdateTimeRelateObject(this); mPtrFrame.setPtrHandler(new PtrHandler() { @Override public void onRefreshBegin(PtrFrameLayout frame) { initData(); loadData(); } @Override public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) { return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header); } }); // 加载更多 listView.setOnLoadMoreListener(new LoadMoreListView.OnLoadMoreListener() { @Override public void onLoadMore() { loadData(); } }); // 点击事件 listView.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { UIHelper.showHouseDetailActivity(context); } }); listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) { Picasso.with(context).pauseTag(context); } else { Picasso.with(context).resumeTag(context); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } private void initData() { param = new SearchParam(); pno = 1; isLoadAll = false; } private void loadData() { if (isLoadAll) { return; } param.setPno(pno); HttpClient.getRecommendShops(param, new HttpResponseHandler() { @Override public void onSuccess(RestApiResponse response) { mPtrFrame.refreshComplete(); List<SearchShop> list = JSONArray.parseArray(response.body, SearchShop.class); listView.updateLoadMoreViewText(list); isLoadAll = list.size() < HttpClient.PAGE_SIZE; if(pno == 1) { adapter.clear(); } adapter.addAll(list); pno++; } @Override public void onFailure(Request request, Exception e) { mPtrFrame.refreshComplete(); listView.setLoadMoreViewTextError(); } }); } @Override public void onResume() { super.onResume(); Picasso.with(context).resumeTag(context); } @Override public void onPause() { super.onPause(); Picasso.with(context).pauseTag(context); } @Override public void onDestroy() { super.onDestroy(); Picasso.with(context).cancelTag(context); } }