package com.wb.sc; import java.util.HashMap; import java.util.Map; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import com.android.volley.Request.Method; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.common.util.PageInfo; import com.wb.sc.activity.base.BaseActivity; import com.wb.sc.activity.base.ReloadListener; import com.wb.sc.config.NetConfig; import com.wb.sc.config.RespCode; import com.wb.sc.config.RespParams; import com.common.net.volley.VolleyErrorHelper; import com.common.widget.ToastHelper; import com.common.widget.helper.PullRefreshListViewHelper; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2; import com.wb.sc.bean.PullRef; import com.wb.sc.task.PullRefRequest; public class PullRefActivity extends BaseActivity implements Listener<PullRef>, ErrorListener, OnItemClickListener, ReloadListener{ private PullToRefreshListView mPullListView; private PullRefreshListViewHelper mPullHelper; private ListView mListView; private PageInfo mPage; private int loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOAD_IDLE; private PullRefRequest mPullRefRequest; private PullRef mPullRef; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pullref); getIntentData(); initView(); } @Override public void getIntentData() { } @Override public void initView() { mPullListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list); mPullListView.setOnRefreshListener(new OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { //处理下拉刷新 mPage.pageNo = 1; startPullRefRequest(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { //处理上拉加载 } }); mPullListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() { @Override public void onLastItemVisible() { //滑动到底部的处理 if(loadState == PullRefreshListViewHelper.BOTTOM_STATE_LOAD_IDLE && mPullRef.hasNextPage) { loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOADING; mPage.pageNo++; startPullRefRequest(); } } }); //设置刷新时请允许滑动的开关使�? mPullListView.setScrollingWhileRefreshingEnabled(true); //设置自动刷新功能 mPullListView.setRefreshing(false); //设置拉动模式 mPullListView.setMode(Mode.PULL_FROM_START); mListView = mPullListView.getRefreshableView(); mListView.setOnItemClickListener(this); mPage = new PageInfo(); mPullHelper = new PullRefreshListViewHelper(this, mListView, mPage.pageSize); mPullHelper.setBottomClick(new OnClickListener() { @Override public void onClick(View v) { if(loadState == PullRefreshListViewHelper.BOTTOM_STATE_LOAD_FAIL) { //加载失败,点击重�? loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOADING; mPullHelper.setBottomState(loadState); startPullRefRequest(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { //此处设置菜单 startPullRefRequest(); return super.onCreateOptionsMenu(menu); } /** * 菜单点击处理 */ @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } /** * 列表选项点击的处�? */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } /** * * @描述:启动请求 */ private void startPullRefRequest() { //requestPullRef(Method.GET, "请求方法", getPullRefRequestParams(), this, this); } /** * 获取请求参数 * @return */ private Map<String, String> getPullRefRequestParams() { Map<String, String> params = new HashMap<String, String>(); params.put(RespParams.PAGE_SIZE, mPage.pageSize+""); params.put(RespParams.PAGE_NO, mPage.pageNo+""); return params; } /** * 执行任务请求 * @param method * @param url * @param params * @param listenre * @param errorListener */ private void requestPullRef(int method, String methodUrl, Map<String, String> params, Listener<PullRef> listenre, ErrorListener errorListener) { if(mPullRefRequest != null) { mPullRefRequest.cancel(); } String url = NetConfig.getServerBaseUrl() + NetConfig.EXTEND_URL + methodUrl; // mPullRefRequest = new PullRefRequest(method, url, params, listenre, errorListener); startRequest(mPullRefRequest); } /** * 网络请求错误处理 * */ @Override public void onErrorResponse(VolleyError error) { mPullListView.onRefreshComplete(); ToastHelper.showToastInBottom(getApplicationContext(), VolleyErrorHelper.getErrorMessage(this, error)); if(mPage.pageNo == 1) { showLoadError(this); } else { loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOAD_FAIL; mPullHelper.setBottomState(PullRefreshListViewHelper.BOTTOM_STATE_LOAD_FAIL, mPage.pageSize); } } @Override public void onReload() { mPage.pageNo = 1; showLoading(); startPullRefRequest(); } /** * 请求完成,处理UI更新 */ @Override public void onResponse(PullRef response) { showContent(); if(response.respCode == RespCode.SUCCESS) { if(response.datas.size() <= 0) { showEmpty(); return; } if(mPage.pageNo == 1) { mPullRef = response; // set adapter showContent(); } else { mPullRef.hasNextPage = response.hasNextPage; mPullRef.datas.addAll(response.datas); //adapter notifyDataSetChanged } loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOAD_IDLE; if(mPullRef.hasNextPage) { mPullHelper.setBottomState(PullRefreshListViewHelper.BOTTOM_STATE_LOADING); } else { mPullHelper.setBottomState(PullRefreshListViewHelper.BOTTOM_STATE_NO_MORE_DATE); } } else { ToastHelper.showToastInBottom(this, response.respCodeMsg); } } }