package net.coding.program.common.ui; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import net.coding.program.R; import net.coding.program.common.ImageLoadTool; import net.coding.program.model.ProjectObject; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** * Created by chenchao on 15/9/25. * 基本的listActivity,没有分隔条,没有分页 */ @EActivity public abstract class BaseListActivity extends BackActivity { // public abstract String getActionbarTitle(); // public abstract String getGetUrl(); // public abstract View getBindView(int position, View convertView, ViewGroup parent); ActivityParam mActivityParam; private ArrayAdapter<Object> mAdapter; public abstract ActivityParam getActivityParam(); private static final String TAG_HTTP_BASE_LIST_ACTIVITY = "TAG_HTTP_BASE_LIST_ACTIVITY"; @AfterViews protected final void BaseListActivity() { mActivityParam = getActivityParam(); getSupportActionBar().setTitle(mActivityParam.mTitle); showDialogLoading(); ListView listView = (ListView) findViewById(R.id.listView); mAdapter = new CustomArrayAdapter<>(this, new ArrayList<Object>()); listView.setAdapter(mAdapter); listView.setOnItemClickListener(mActivityParam.mItemClick); getNetwork(mActivityParam.mUrl, TAG_HTTP_BASE_LIST_ACTIVITY); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(TAG_HTTP_BASE_LIST_ACTIVITY)) { hideProgressDialog(); if (code == 0) { JSONArray jsonArray = respanse.optJSONArray("data"); if (jsonArray == null) { jsonArray = respanse.optJSONObject("data").optJSONArray("list"); } mAdapter.setNotifyOnChange(false); for (int i = 0; i < jsonArray.length(); ++i) { JSONObject item = jsonArray.optJSONObject(i); mAdapter.add(new ProjectObject(item)); } mAdapter.notifyDataSetChanged(); } else { showErrorMsg(code, respanse); } } else { super.parseJson(code, respanse, tag, pos, data); } } class CustomArrayAdapter<T> extends ArrayAdapter<T> { public CustomArrayAdapter(Context context, List<T> objects) { super(context, 0, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { try { BaseViewHold hold; if (convertView == null) { hold = mActivityParam.mViewHold.newInstance(); convertView = LayoutInflater.from(parent.getContext()).inflate(hold.getLayout(), parent, false); hold.init(convertView, getImageLoad()); convertView.setTag(hold); } else { hold = (BaseViewHold) convertView.getTag(); } hold.setData(getItem(position)); return convertView; } catch (Exception e) { return new TextView(parent.getContext()); } } } public static class ActivityParam { String mTitle; String mUrl; AdapterView.OnItemClickListener mItemClick; Class<BaseViewHold> mViewHold; public ActivityParam(String mTitle, String mUrl, Class<BaseViewHold> mViewHold, AdapterView.OnItemClickListener mItemClick) { this.mTitle = mTitle; this.mUrl = mUrl; this.mViewHold = mViewHold; this.mItemClick = mItemClick; } } public interface BaseViewHold { public int getLayout(); public void init(View v, ImageLoadTool imageLoadTool); public void setData(Object data); } }