package com.todayinfo.ui.fragment; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.json.JSONArray; import org.json.JSONObject; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.handmark.pulltorefresh.library.PullToRefreshAdapterViewBase.OnPreRefreshingAnimListener; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.jinghua.todayinformation.R; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.squareup.picasso.Picasso; import com.todayinfo.model.PhonePhotoItem; import com.todayinfo.model.PhonePaging; import com.todayinfo.ui.activity.PhonePhotoDetailActivity; import com.todayinfo.ui.api.DataTask; import com.todayinfo.ui.component.ErrorHintView; import com.todayinfo.ui.component.ErrorHintView.OperateListener; import com.todayinfo.utils.AsyncHttpUtil; import com.todayinfo.utils.Contacts; import com.todayinfo.utils.JsonUtils; import com.todayinfo.utils.MD5Utils; /** * 手机美图 * * @author zhou.ni 2015年5月5日 */ public class PhonePhotoFragment extends SuperFragment { private View view; private PullToRefreshListView mListView; private ErrorHintView mErrorHintView; private List<PhonePhotoItem> photoList = new ArrayList<PhonePhotoItem>(); private PhonePhotoAdapter photoAdapter; private int offset = 0; //第N条数据 private boolean isPage = true; //是否还有下一页 private LinearLayout footerView; //最后一条listview public static int VIEW_LIST = 1; /**显示断网**/ public static int VIEW_WIFIFAILUER = 2; /** 显示加载数据失败 **/ public static int VIEW_LOADFAILURE = 3; public static int VIEW_LOADING = 4; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fm_phonephoto, container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); } /** * 初始化控件 */ private void initView() { mListView = (PullToRefreshListView) view.findViewById(R.id.phone_photo_list); mErrorHintView = (ErrorHintView) view.findViewById(R.id.hintView); photoAdapter = new PhonePhotoAdapter(); mListView.setAdapter(photoAdapter); setupIdleListener(); showLoading(VIEW_LOADING); refreshData(true); } protected void setupIdleListener() { mListView.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { if (refreshView.isHeaderShown()){ defParams(); refreshData(true); } } }); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { PhonePhotoItem item = photoList.get(position-1); Intent intent = new Intent(mContext, PhonePhotoDetailActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("PhonePhotoItem", item); intent.putExtras(bundle); mContext.startActivity(intent); } }); mListView.setOnPreRefreshingAnimListener(new OnPreRefreshingAnimListener() { @Override public void onPreRefreshingAnim() { mListView.setFooterLoadingViewHeaderText("加载更多图片"); } }); mListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() { @Override public void onLastItemVisible() { if ( isPage ) { //滑动到底部自动刷新 refreshData(false); } else { //没有下一页了 mListView.onRefreshComplete(); if ( footerView == null ) { footerView = (LinearLayout) View.inflate(mContext, R.layout.item_pull_to_refresh_footer, null); TextView footer = (TextView) footerView.findViewById(R.id.footer); footer.setText("到底了呢-共" + photoList.size() + "条资讯"); mListView.getRefreshableView().addFooterView(footerView); } } } }); } private void refreshData(boolean clean) { dataTask = new RefreshDataTask(dataTask.getID() + 1, clean); dataTask.run(); } class RefreshDataTask extends DataTask { boolean clean = false; // 是否清空原数据 public RefreshDataTask(int id, boolean flag) { super(id); this.clean = flag; } @Override public void run() { // 判断是不是用户的最后操作,最后任务的ID如果比此任务的ID大则丢弃请求结果 if (getID() < dataTask.getID()) { return; } else { loadPhonePhotoInfo(clean); } } } /** * 加载最新的手机资讯图片 * @param clean */ private void loadPhonePhotoInfo(final boolean clean){ RequestParams params = new RequestParams(); String t = String.valueOf(System.currentTimeMillis() / 1000); //获取当前时间 params.put("timestamp", t); //当前时间戳 String token1 = MD5Utils.md5("d19cf361181f5a169c107872e1f5b722" + t); params.put("token1", token1); //token1算法 params.put("apiid", 3); params.put("module", "api_libraries_sjdbg_aimeizhi"); params.put("returnformat", "json"); params.put("encoding", "utf8"); // params.put("onetime", timeStamp); //分页用,传第一条新闻的时间戳,第一页下不用传值。 params.put("offset", offset ); //分页用,数据记录的起始行数。0为第一条记录。 params.put("rows", 10); //分页用,数据记录每次取得的行数。不传此参数则默认获取10条记录。 AsyncHttpUtil.get(Contacts.PHONE_URL, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int arg0, Header[] arg1, byte[] responseBody) { if ( footerView!=null ){ mListView.getRefreshableView().removeFooterView(footerView); footerView = null; } mListView.onRefreshComplete(); if ( responseBody!=null && responseBody.length>0 ){ try { JSONObject object = new JSONObject(new String(responseBody)); String status = object.getString("status"); if ( TextUtils.equals("1", status) ) { offset += 10; JSONObject data = object.getJSONObject("data"); JSONArray result = data.getJSONArray("result"); JSONObject paging = data.getJSONObject("paging"); if ( result!=null ){ List<PhonePhotoItem> list = JsonUtils.getInstance(PhonePhotoItem.class, result); if ( list!=null && list.size()>0) { if ( clean ) { photoList.clear(); } photoList.addAll(list); showLoading(VIEW_LIST); photoAdapter.notifyDataSetChanged(); } else { showLoading(VIEW_LOADFAILURE); } } else { showLoading(VIEW_LOADFAILURE); } if ( paging!=null ){ PhonePaging instance = JsonUtils.getInstance(PhonePaging.class, paging); if( instance!=null ) { try { int total = Integer.parseInt(instance.getTotal()); if ( offset >= total ) { isPage = false; } else { isPage = true; } } catch (Exception e) { isPage = true; } } } } } catch (Exception e) { showLoading(VIEW_LOADFAILURE); } } } @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { showLoading(VIEW_WIFIFAILUER); } }); } private void showLoading(int i){ mErrorHintView.setVisibility(View.GONE); mListView.setVisibility(View.GONE); switch(i){ case 1: mErrorHintView.hideLoading(); mListView.setVisibility(View.VISIBLE); break; case 2: mErrorHintView.hideLoading(); mErrorHintView.netError(new OperateListener() { @Override public void operate() { defParams(); showLoading(VIEW_LOADING); refreshData(true); } }); break; case 3: mErrorHintView.hideLoading(); mErrorHintView.loadFailure(new OperateListener() { @Override public void operate() { defParams(); showLoading(VIEW_LOADING); refreshData(true); } }); break; case 4: mErrorHintView.loadingData(); break; } } @Override public void retry() { } @Override public void netError() { } @Override public void pwdError() { } /** * 恢复默认参数 */ private void defParams(){ offset = 0; isPage = true; } class PhonePhotoAdapter extends BaseAdapter { @Override public int getCount() { return photoList.size(); } @Override public Object getItem(int position) { return photoList.get(position); } @Override public long getItemId(int position) { return position; } ViewHolder holder = null;; @Override public View getView(int position, View convertView, ViewGroup parent) { if ( convertView == null ) { holder = new ViewHolder(); convertView = View.inflate(mContext, R.layout.item_phone_photo_lv, null); holder.img = (ImageView) convertView.findViewById(R.id.img); holder.text = (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } PhonePhotoItem item = photoList.get(position); holder.item = item; if ( !TextUtils.isEmpty(item.getPic()) ){ Picasso.with(mContext).load(item.getPic()).placeholder(R.color.ECECEC).error(R.color.ECECEC).into(holder.img); } if ( !TextUtils.isEmpty(item.getTitle()) ) { holder.text.setText(item.getTitle()); } else { holder.text.setText(""); } return convertView; } } static class ViewHolder { ImageView img; TextView text; PhonePhotoItem item; } }