package com.pets.center; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import libcore.io.HttpClientUtils; import org.apache.http.Header; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Toast; import com.example.actionbar.R; import com.example.dragListView.FlushOnPullListView; import com.google.gson.GsonBuilder; import com.loopj.android.http.BaseJsonHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.pets.activity.DailyShareInfoActivity; import com.pets.bean.DailyShareImg; import com.pets.bean.DailyShareSubject; import com.pets.bean.User; import com.pets.dao.BaseDao; import com.pets.dao.DailySubjectDao; import com.pets.dummy.DummyDailyShareRecord; import com.pets.dummy.DummyFactory; import com.pets.model.JsonResult; import com.pets.ui.PetSimpleAdapter; import com.pets.ui.PetSimpleAdapter.OnclickCallback; import com.pets.ui.ProgressMenuItem; import com.pets.util.ConnectUtils; import com.pets.util.DateUtils; /** * 萌宠中心 * * @author Administrator * */ public class PetDailyShareFragment extends Fragment implements FlushOnPullListView.OnRefreshLoadingMoreListener, OnRefleshListener { private static final String TAG = PetDailyShareFragment.class .getSimpleName(); private BaseDao<DailyShareSubject> dao; private static int currSelected = 0; private static final String SELECTED = "selectedItemPosition"; private FlushOnPullListView list; private final static int DRAG_INDEX = 1;// 下拉刷新标识 private final static int LOADMORE_INDEX = 2;// 加载更多标识 private List<Map<String, Object>> listData; private PetSimpleAdapter adapter; // 刷新按钮handler private Handler flushHanler; private OnclickCallback callback = new OnclickCallback() { @Override public void onClick(View v, Integer position) { currSelected = position; if (v.getId() == R.id.daily_share_imgview) { Intent intent = new Intent(); Map<String, Object> data = listData.get(position); intent.putExtra("img", (String) data.get("img")); intent.putExtra("username", (String) data.get("username")); intent.putExtra("content", (String) data.get("content")); intent.setClass(getActivity(), DailyShareInfoActivity.class); startActivity(intent); } } }; public void onSaveInstanceState(Bundle outState) { outState.putInt(SELECTED, currSelected); super.onSaveInstanceState(outState); }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dao = new DailySubjectDao(getActivity(), null); Log.i(TAG, "oncreate" + currSelected); } /** * 初始化需要添加监听事件的view id * * @return */ private ArrayList<Integer> initItemsListener() { ArrayList<Integer> listenerItem = new ArrayList<Integer>(); listenerItem.add(R.id.daily_share_zan); listenerItem.add(R.id.daily_share_text); listenerItem.add(R.id.daily_share_pin); listenerItem.add(R.id.daily_share_imgview); listenerItem.add(R.id.daily_share_cai); return listenerItem; } private View listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { listView = LayoutInflater.from(this.getActivity()).inflate( R.layout.pets_daily_share_list, null, false); list = (FlushOnPullListView) listView .findViewById(R.id.daily_share_list); list.setEmptyView(listView.findViewById(R.id.empty)); listData = getMapData(); ArrayList<Integer> listenerItem = initItemsListener(); adapter = new PetSimpleAdapter(getActivity(), listData, R.layout.pets_daily_share_list_item, new String[] { "userImg", "img", "username", "content" }, new int[] { R.id.daily_share_user_img, R.id.daily_share_imgview, R.id.daily_share_username, R.id.daily_share_text }, listenerItem, callback); list.setAdapter(adapter); list.setOnRefreshListener(this); // list.setOnItemClickListener(new ItemClickListener()); // list.setOnItemLongClickListener(new ItemLongClickListener()); // if (adapter.getCount() > currSelected) { // list.setSelection(currSelected + 1); // } return listView; } private List<Map<String, Object>> getMapData() { final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); // 这里需要从数据库获取数据 List<DailyShareSubject> subjects = dao.getAll(10); if (subjects.size() == 0) { loadFromNet(); return list; } // 异步获取数据 for (int i = 0; i < subjects.size(); i++) { DailyShareSubject record = subjects.get(i); Map<String, Object> map = new HashMap<String, Object>(); map.put("content", record.getContent()); map.put("title", record.getUsername()); map.put("username", record.getUsername() + "\t" + com.pets.util.DateUtils.format(record.getCreateDate())); list.add(map); } return list; // try { // // Log.i("conn2", "获取数据开始。。。。" + Thread.currentThread().getId()); // // HttpClientUtils.getClient(getActivity()).get( // "http://www.baidu.com", new TextHttpResponseHandler() { // @Override // public void onSuccess(int statusCode, Header[] headers, // String responseString) { // // // 测试时使用 // List<DummyDailyShareRecord> records = DummyFactory // .dailyShareRecordFactory(10, "异步加载的标题哦", // "哈哈哈 我是内容啊!", "陈孟琳"); // // // 异步获取数据 // for (int i = 0; i < records.size(); i++) { // // DummyDailyShareRecord record = records.get(i); // Map<String, Object> map = new HashMap<String, Object>(); // map.put("content", record.getContent()); // map.put("title", record.getTitle()); // map.put("username", // record.getUsername() // + "\t" // + com.pets.util.DateUtils // .format(record // .getTime())); // list.add(map); // // } // adapter.notifyDataSetChanged(); // } // // @Override // public void onFailure(int statusCode, Header[] headers, // String responseString, Throwable throwable) { // Log.i("conn2", "获取数据开始失败" // + Thread.currentThread().getId() + "::" // + throwable.getMessage()); // } // }); // Log.i("conn2", "获取数据开始结束" + Thread.currentThread().getId()); // } catch (CannotConnect2NetException e) { // Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG) // .show(); // } // // return list; } private void loadFromNet() { try { RequestParams params = ConnectUtils.getParams(getActivity(), "dailyShare"); HttpClientUtils .getClient(getActivity()) .post("http://192.168.1.110:8080/pp/dailyShare/findSubject.action", params, new BaseJsonHttpResponseHandler<JsonResult>() { @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonResponse, JsonResult response) { try { for (DailyShareSubject s : response .getRows()) { Map<String, Object> map = new HashMap<String, Object>(); map.put("username", s.getUsername() + "\n" + DateUtils.format(s .getCreateDate())); map.put("content", s.getContent()); User user = s.getUser(); if (null != user && user.getImg() != null) { // 用户头像 map.put("userImg", user .getImg().getUrl()); } // TODO 测试盒 map.put("userImg", "http://192.168.1.110:8080/pp/img/people.png"); DailyShareImg img = s.getShareImg(); if (null != img) { map.put("img", img.getUrl()); } listData.add(map); } adapter.notifyDataSetChanged(); } catch (Exception e) { Log.i("conn2", "onSuccess数据封装出错:" + e.getMessage()); } } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, String rawJsonData, JsonResult errorResponse) { Toast.makeText(getActivity(), "网络连接失败", Toast.LENGTH_LONG).show(); Log.i("conn2", "获取数据出错onFailure:" + throwable.getMessage()); } @Override protected JsonResult parseResponse( String rawJsonData, boolean isFailure) throws Throwable { GsonBuilder builder = new GsonBuilder() .setDateFormat("yyyy-MM-dd HH:mm:ss"); Log.i("conn2", "parseResponse:" + rawJsonData); return builder.create().fromJson( rawJsonData, JsonResult.class); } }); Log.i("conn2", "获取数据开始结束" + Thread.currentThread().getId()); } catch (Exception e) { Log.i("conn2", "获取数据出错:" + e.getMessage()); } } /*** * 执行类 异步 * * @author zhangjia * */ class MyAsyncTask extends AsyncTask<Void, Void, List<DummyDailyShareRecord>> { private Context context; private int index;// 用于判断是下拉刷新还是点击加载更多 public MyAsyncTask(Context context, int index) { this.context = context; this.index = index; } @Override protected List<DummyDailyShareRecord> doInBackground(Void... params) { int random = (int) (Math.random() * 20); return DummyFactory.dailyShareRecordFactory(random, "from net:" + random); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(List<DummyDailyShareRecord> data) { for (DummyDailyShareRecord record : data) { Map<String, Object> map = new HashMap<String, Object>(); map.put("content", record.getContent()); map.put("title", record.getTitle()); map.put("img", record.getImg()); map.put("username", record.getUsername() + "\t" + DateUtils.format(record.getTime())); listData.add(0, map); } // 刷新显示 adapter.notifyDataSetChanged(); Log.i("text", "onPostExecute,返回数据了!"); if (index == DRAG_INDEX) list.onRefreshComplete(); else if (index == LOADMORE_INDEX) list.onLoadMoreComplete(false); Toast.makeText(getActivity(), "刷新成功,新加记录" + data.size() + "个", Toast.LENGTH_LONG).show(); // 返回回调信息 onComplete(); } } /*** * 下拉刷新 */ @Override public void onRefresh() { Log.i("text", "onRefresh:开始下拉刷新"); new MyAsyncTask(this.getActivity(), DRAG_INDEX).execute(); } /*** * 点击加载更多 */ @Override public void onLoadMore() { new MyAsyncTask(this.getActivity(), LOADMORE_INDEX).execute(); } class ItemLongClickListener implements OnItemLongClickListener { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getActivity(), "点击了,确定删除这个么?", Toast.LENGTH_SHORT) .show(); // parent.removeViewAt(position); return true; } } @Override public void onReflesh(ProgressMenuItem item) { new MyAsyncTask(this.getActivity(), DRAG_INDEX).execute(); } @Override public void onComplete() { if (null != flushHanler) { if (list.getCount() > 0) list.setSelection(0); flushHanler.sendEmptyMessage(1); } } @Override public void setHandler(Handler handler) { flushHanler = handler; } }