package com.roboo.qiushibaike.fragment; import java.util.LinkedList; import android.content.Intent; import android.os.AsyncTask; import android.os.AsyncTask.Status; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.TextView; import com.roboo.qiushibaike.R; import com.roboo.qiushibaike.UserQiuShiActivity; import com.roboo.qiushibaike.adapter.CommentListAdapter; import com.roboo.qiushibaike.dao.ICommentItemDao; import com.roboo.qiushibaike.dao.impl.CommentItemDaoImpl; import com.roboo.qiushibaike.databases.DBHelper; import com.roboo.qiushibaike.model.CommentItem; import com.roboo.qiushibaike.model.QiuShiItem; import com.roboo.qiushibaike.ptr.PullToRefreshBase; import com.roboo.qiushibaike.ptr.PullToRefreshBase.OnRefreshListener2; import com.roboo.qiushibaike.ptr.PullToRefreshListView; import com.roboo.qiushibaike.utils.QSBKUtils; import com.roboo.qiushibaike.view.RoundProgressBar; public class CommentFragment extends Fragment { private PullToRefreshListView mPTRListView; private RoundProgressBar mRoundProgressBar; private TextView mTextView; private LinkedList<CommentItem> mData; private CommentListAdapter mAdapter; private QiuShiItem mItem; private int mCurrentPageNo = 1; private static final String ARG_ITEM = "item"; private GetDataTask mGetDataTask = new GetDataTask(); public static CommentFragment newInstance(QiuShiItem item) { Bundle bundle = new Bundle(); bundle.putSerializable(ARG_ITEM, item); CommentFragment commentFragment = new CommentFragment(); commentFragment.setArguments(bundle); return commentFragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mItem = (QiuShiItem) getArguments().getSerializable(ARG_ITEM); View view = inflater.inflate(R.layout.ptr_listview, null); view.setPadding(0, 0, 0, 0); mPTRListView = (PullToRefreshListView) view.findViewById(R.id.ptr_listview); mTextView = (TextView) view.findViewById(R.id.tv_text); mRoundProgressBar = (RoundProgressBar) view.findViewById(R.id.roundProgressBar); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setListener(); ICommentItemDao commentItemDao = new CommentItemDaoImpl(new DBHelper(getActivity())); if (null != mItem) { mData = commentItemDao.getItems(mItem.md5, mCurrentPageNo); mAdapter = new CommentListAdapter(getActivity(), mData,mItem); mPTRListView.setAdapter(mAdapter); if (null == mData) { mGetDataTask.execute(); } else { mRoundProgressBar.setVisibility(View.GONE); mTextView.setVisibility(View.GONE); } } } private void setListener() { this.mPTRListView.setOnRefreshListener(new OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { if (mGetDataTask.getStatus() == Status.FINISHED) { mGetDataTask = new GetDataTask(); } if (mGetDataTask.getStatus() != Status.RUNNING) { mCurrentPageNo = 1; mGetDataTask.execute(); } } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { if (mGetDataTask.getStatus() == Status.FINISHED) { mGetDataTask = new GetDataTask(); } if (mGetDataTask.getStatus() != Status.RUNNING) { mCurrentPageNo += 1; mGetDataTask.execute(); } } }); this.mPTRListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { CommentItem item = (CommentItem) parent.getAdapter().getItem(position); Intent intent = new Intent(getActivity(), UserQiuShiActivity.class); mItem.authorUrl = item.commentAuthorUrl; mItem.authorName = item.commentAuthorName; intent.putExtra("item", mItem); getActivity().startActivity(intent); } }); } @Override public void onPause() { if(mGetDataTask.getStatus() == Status.RUNNING) { mGetDataTask.cancel(true); } super.onPause(); } public class GetDataTask extends AsyncTask<Void, Float, Boolean> { @Override protected Boolean doInBackground(Void... params) { System.out.println("mCurrentPageNo = " + mCurrentPageNo); if (mCurrentPageNo > 1) { return Boolean.valueOf(true); } else { Boolean flag = false; LinkedList<CommentItem> data = QSBKUtils.handleCommentData(mItem); ICommentItemDao commentItemDao = new CommentItemDaoImpl(new DBHelper(getActivity())); if (null != data && data.size() > 0) { int insertCount = 0; float progress = 0; for (int i = data.size() - 1; i >= 0; i--) { CommentItem item = data.get(i); item.time = System.currentTimeMillis(); insertCount += commentItemDao.insert(item); System.out.println(item); progress += 100.0 / data.size(); publishProgress(progress); } System.out.println("插入 " + insertCount + " 条数据"); flag = true; } return flag; } } @Override protected void onProgressUpdate(Float... values) { super.onProgressUpdate(values); if (mData == null && mCurrentPageNo == 1) { mRoundProgressBar.setProgress(values[0].intValue()); if (values[0] > 99) { mTextView.setVisibility(View.GONE); mRoundProgressBar.setVisibility(View.GONE); } } } @Override protected void onPostExecute(Boolean result) { mPTRListView.onRefreshComplete(); if (result.booleanValue()) { ICommentItemDao commentItemDao = new CommentItemDaoImpl(new DBHelper(getActivity())); LinkedList<CommentItem> tmp = commentItemDao.getItems(mItem.md5, mCurrentPageNo); if (tmp != null && tmp.size() > 0) { if (null == mData) { mRoundProgressBar.setVisibility(View.GONE); mTextView.setVisibility(View.GONE); mData = new LinkedList<CommentItem>(); mData.addAll(tmp); mAdapter = new CommentListAdapter(getActivity(), mData,mItem); mPTRListView.setAdapter(mAdapter); } else { if (mCurrentPageNo == 1) { for (CommentItem item : tmp) { if (!mData.contains(item)) { mData.addFirst(item); } } } else { for (CommentItem item : tmp) { if (!mData.contains(item)) { mData.addLast(item); } } } mAdapter.notifyDataSetChanged(); } } } else { mCurrentPageNo -= 1; } } } }