package com.wb.sc.mk.butler; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ListView; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.common.net.volley.VolleyErrorHelper; import com.common.util.PageInfo; 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.PullToRefreshBase.OnRefreshListener2; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.wb.sc.R; import com.wb.sc.activity.base.BaseExtraLayoutFragment; import com.wb.sc.activity.base.BaseNetActivity; import com.wb.sc.activity.base.ReloadListener; import com.wb.sc.adapter.RentalHouseListAdapter; import com.wb.sc.adapter.SaleHouseListAdapter; import com.wb.sc.app.SCApp; import com.wb.sc.bean.SaleHouseList; import com.wb.sc.bean.SaleHouseList.Item; import com.wb.sc.config.IntentExtraConfig; import com.wb.sc.config.NetConfig; import com.wb.sc.config.RespCode; import com.wb.sc.dialog.ConfirmDialog; import com.wb.sc.task.SaleHouseListRequest; import com.wb.sc.util.ParamsUtil; /** * * @描述:可出售/出租房源列表 * @作者:liang bao xian * @时间:2014年11月9日 下午3:58:37 */ public class HouseTradeListFragment extends BaseExtraLayoutFragment implements Listener<SaleHouseList>, ErrorListener, OnItemClickListener, ReloadListener{ private PullToRefreshListView mPullListView; private PullRefreshListViewHelper mPullHelper; private ListView mListView; private BaseAdapter adapter; private PageInfo mPage = new PageInfo(); private int loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOAD_IDLE; private SaleHouseListRequest mSaleHouseListRequest; private SaleHouseList mSaleHouseList; private BaseNetActivity mActivity; int tradeType; @Override public void onAttach(Activity activity) { super.onAttach(activity); mActivity = (BaseNetActivity) activity; tradeType = getArguments().getInt(IntentExtraConfig.HOUSE_TRADE_TYPE); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return setContentView(inflater, R.layout.fragment_sale_list); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(view); showLoading(); } private void initView(View view) { mPullListView = (PullToRefreshListView) view.findViewById(R.id.pull_refresh_list); mPullListView.setOnRefreshListener(new OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { //处理下拉刷新 mPage.pageNo = 1; startSaleHouseListRequest(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { //处理上拉加载 } }); mPullListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() { @Override public void onLastItemVisible() { //滑动到底部的处理 if(loadState == PullRefreshListViewHelper.BOTTOM_STATE_LOAD_IDLE && mSaleHouseList.hasNextPage) { loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOADING; mPage.pageNo++; startSaleHouseListRequest(); } } }); //设置刷新时请允许滑动的开关使能 mPullListView.setScrollingWhileRefreshingEnabled(true); //设置自动刷新功能 mPullListView.setRefreshing(false); //设置拉动模式 mPullListView.setMode(Mode.PULL_FROM_START); mListView = mPullListView.getRefreshableView(); mListView.setOnItemClickListener(this); mPage = new PageInfo(); mPullHelper = new PullRefreshListViewHelper(mActivity, 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); startSaleHouseListRequest(); } } }); } /** * 列表选项点击的处理 */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // final Item item = mSaleHouseList.datas.get(position-1); // new ConfirmDialog().getDialog(mActivity, "呼叫", item.phone, // new DialogInterface.OnClickListener() { // // @Override // public void onClick(DialogInterface dialog, int which) { // dialog.dismiss(); // Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+item.phone)); // mActivity.startActivity(intent); // } // }).show(); } /** * * @描述:启动请求 */ private void startSaleHouseListRequest() { requestSaleHouseList(getSaleHouseListRequestParams(), this, this); } /** * 获取请求参数 * @return */ private List<String> getSaleHouseListRequestParams() { List<String> params = new ArrayList<String>(); if(tradeType == IntentExtraConfig.HOUSE_TRADE_TYPE_SALE) { params.add(ParamsUtil.getReqParam("FG27", 4)); } else { params.add(ParamsUtil.getReqParam("FG26", 4)); } params.add(ParamsUtil.getReqParam("MC_CENTERM", 16)); params.add(ParamsUtil.getReqParam("00001", 20)); params.add(ParamsUtil.getReqParam(SCApp.getInstance().getUser().communityId, 64)); params.add(ParamsUtil.getReqIntParam(mPage.pageNo, 3)); params.add(ParamsUtil.getReqIntParam(mPage.pageSize, 2)); return params; } /** * 执行任务请求 * @param method * @param url * @param params * @param listenre * @param errorListener */ private void requestSaleHouseList(List<String> params, Listener<SaleHouseList> listenre, ErrorListener errorListener) { if(mSaleHouseListRequest != null) { mSaleHouseListRequest.cancel(); } String url = NetConfig.getServerBaseUrl() + NetConfig.EXTEND_URL; mSaleHouseListRequest = new SaleHouseListRequest(url, params, listenre, errorListener); mActivity.startRequest(mSaleHouseListRequest); } /** * 网络请求错误处理 * */ @Override public void onErrorResponse(VolleyError error) { mPullListView.onRefreshComplete(); ToastHelper.showToastInBottom(mActivity, VolleyErrorHelper.getErrorMessage(mActivity, 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(); startSaleHouseListRequest(); } /** * 请求完成,处理UI更新 */ @Override public void onResponse(SaleHouseList response) { if(mPullListView.isRefreshing()) { mPullListView.onRefreshComplete(); } if(response.respCode.equals(RespCode.SUCCESS)) { if(response.datas.size() <= 0) { showEmpty(); return; } if(mPage.pageNo == 1) { mSaleHouseList = response; // set adapter showContent(); if(tradeType == 0) { adapter = new SaleHouseListAdapter(mActivity, mSaleHouseList); } else { adapter = new RentalHouseListAdapter(mActivity, mSaleHouseList); } mListView.setAdapter(adapter); } else { mSaleHouseList.hasNextPage = response.hasNextPage; mSaleHouseList.datas.addAll(response.datas); //adapter notifyDataSetChanged adapter.notifyDataSetChanged(); } loadState = PullRefreshListViewHelper.BOTTOM_STATE_LOAD_IDLE; if(mSaleHouseList.hasNextPage) { mPullHelper.setBottomState(PullRefreshListViewHelper.BOTTOM_STATE_LOADING); } else { mPullHelper.setBottomState(PullRefreshListViewHelper.BOTTOM_STATE_NO_MORE_DATE); } } else { ToastHelper.showToastInBottom(mActivity, response.respCodeMsg); } } }