package com.diandi.demo.ui.fragment; /** * ******************************************************************************* * ********* Author : klob(kloblic@gmail.com) . * ********* Date : 2014-11-29 . * ********* Time : 11:46 . * ********* Project name : Diandi1.18 . * ********* Version : 1.0 * ********* Copyright @ 2014, klob, All Rights Reserved * ******************************************************************************* */ import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.TextView; import com.diandi.demo.CustomApplication; import com.diandi.demo.R; import com.diandi.demo.adapter.FeedAdapter; import com.diandi.demo.db.DatabaseUtilC; import com.diandi.demo.model.diandi.DianDi; import com.diandi.demo.sync.UserHelper; import com.diandi.demo.ui.activity.CommentActivity; import com.diandi.demo.ui.activity.NewDiandiActivity; import com.diandi.demo.ui.activity.PlanActivity; import com.diandi.demo.ui.activity.Test; import com.diandi.demo.ui.activity.WritePlanActivity; import com.diandi.demo.util.CollectionUtils; import com.diandi.demo.util.OverridePendingUtil; import com.diandi.view.ListviewButton; import com.diandi.demo.widget.dialog.ListDialog; import com.diandi.demo.widget.xlist.XListView; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import cn.bmob.im.task.BRequest; import cn.bmob.im.util.BmobLog; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.datatype.BmobDate; import cn.bmob.v3.listener.CountListener; import cn.bmob.v3.listener.FindListener; public class FeedFragment extends BaseFragment implements XListView.IXListViewListener, AdapterView.OnItemClickListener { private final static String FEED_LIST = "feed_list_"; private BmobQuery<DianDi> query; private ArrayList<DianDi> mListItems; private FeedAdapter mAdapter; private XListView mListView; private TextView networkTips; private int mPageNum; private ListviewButton mListviewButton; public void setListView(XListView listView) { mListView = listView; } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_channel, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); findView(); initView(); List<Map<String, String>> list = new ArrayList<Map<String, String>>(); } @Override public void findView() { mListView = (XListView) findViewById(R.id.fragment_diandi_listview); networkTips = (TextView) findViewById(R.id.fragment_dianndi_networktips); mListviewButton = (ListviewButton) findViewById(R.id.buttonFloat); mListviewButton.attachToListView(mListView); mListviewButton.setDrawableIcon(getResources().getDrawable(R.drawable.ic_action_new)); } @Override public void initView() { mListItems = new ArrayList<DianDi>(); mPageNum = 0; if (CustomApplication.getInstance().getCache().getAsObject(FEED_LIST) != null) { mListItems = (ArrayList<DianDi>) CustomApplication.getInstance().getCache().getAsObject(FEED_LIST); networkTips.setVisibility(View.GONE); } query = new BmobQuery<DianDi>(); query.order("-createdAt"); query.setLimit(BRequest.QUERY_LIMIT_COUNT); query.include("author"); initXListView(); bindEvent(); } @Override public void onStop() { super.onStop(); if (mListItems != null) { CustomApplication.getInstance().getCache().put(FEED_LIST, mListItems); } } private void initXListView() { mListView.setPullLoadEnable(false); mListView.setPullRefreshEnable(true); mListView.setXListViewListener(this); // mListView.pullRefreshing(); mAdapter = new FeedAdapter(getActivity(), mListItems); mListView.setAdapter(mAdapter); initDiandyList(false); } @Override void bindEvent() { mListView.setOnItemClickListener(this); mListviewButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final ArrayList<String> list = new ArrayList<String>(); list.add("记下点滴"); list.add("打开格子"); list.add("新建计划"); // list.add("发布匿名"); final ListDialog listDialog = new ListDialog(getActivity(), "操作", list); listDialog.show(); listDialog.setOnListItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { if (i == 0) { startAnimActivity(NewDiandiActivity.class); } if (i == 1) { startAnimActivity(PlanActivity.class); } if (i == 2) { startAnimActivity(WritePlanActivity.class); } if (i == 3) { startAnimActivity(Test.class); } listDialog.dismiss(); } }); OverridePendingUtil.in(getActivity()); } }); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { Intent intent = new Intent(); intent.setClass(getActivity(), CommentActivity.class); intent.putExtra("data", mListItems.get(position - 1)); startAnimActivity(intent); } @Override public void onRefresh() { mPageNum = 0; new Handler().postDelayed(new Runnable() { @Override public void run() { initDiandyList(true); } }, 700); } @Override public void onLoadMore() { query.count(getActivity(), DianDi.class, new CountListener() { @Override public void onSuccess(int i) { if (i > mListItems.size()) { mPageNum++; query.setSkip(BRequest.QUERY_LIMIT_COUNT * (mPageNum)); query.findObjects(getActivity(), new FindListener<DianDi>() { @Override public void onSuccess(List<DianDi> list) { if (UserHelper.getCurrentUser() != null) { list = DatabaseUtilC.getInstance(getActivity()).setFav(list); } mListItems.addAll(list); mAdapter.setList(mListItems); refreshLoad(); } @Override public void onError(int arg0, String arg1) { BmobLog.i("查询错误:" + arg1); mListView.setPullLoadEnable(false); refreshLoad(); } }); } else { ShowToast("数据加载完成"); mListView.setPullLoadEnable(false); refreshLoad(); } } @Override public void onFailure(int i, String s) { refreshLoad(); } } ); } private void initDiandyList(final boolean isUpdate) { query.addWhereLessThan("createdAt", new BmobDate(new Date(System.currentTimeMillis()))); query.setSkip(BRequest.QUERY_LIMIT_COUNT * mPageNum); query.findObjects(getActivity(), new FindListener<DianDi>() { @Override public void onSuccess(List<DianDi> list) { networkTips.setVisibility(View.INVISIBLE); if (CollectionUtils.isNotNull(list)) { if (isUpdate || mPageNum == 0) { mListItems.clear(); mAdapter.setList(mListItems); } if (UserHelper.getCurrentUser() != null) { list = DatabaseUtilC.getInstance(getActivity()).setFav(list); } mListItems.addAll(list); mAdapter.setList(mListItems); if (list.size() < BRequest.QUERY_LIMIT_COUNT) { mListView.setPullLoadEnable(false); } else { mListView.setPullLoadEnable(true); } } else { BmobLog.i("查询成功:无返回值"); if (mListItems != null) { mListItems.clear(); } } if (isUpdate) { refreshPull(); // progressDialog.dismiss(); } //这样能保证每次查询都是从头开始 mPageNum = 0; } @Override public void onError(int arg0, String arg1) { BmobLog.i("查询错误:" + arg1); mListView.setPullLoadEnable(false); refreshPull(); //这样能保证每次查询都是从头开始 mPageNum = 0; ShowToast(R.string.network_tips); } }); } private void refreshLoad() { if (mListView.getPullLoading()) { mListView.stopLoadMore(); networkTips.setVisibility(View.INVISIBLE); } } private void refreshPull() { if (mListView.getPullRefreshing()) { mListView.stopRefresh(); networkTips.setVisibility(View.INVISIBLE); } } private String getCurrentTime() { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String times = formatter.format(new Date(System.currentTimeMillis())); return times; } }