package org.succlz123.doubanbooklog.ui.contetnfragment;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.AsyncTask;
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.*;
import org.succlz123.doubanbooklog.R;
import org.succlz123.doubanbooklog.bean.bookinfo.DbCollection;
import org.succlz123.doubanbooklog.bean.reviewsinfo.ReviewsObject;
import org.succlz123.doubanbooklog.bean.reviewsinfo.ReviewsResult;
import org.succlz123.doubanbooklog.dao.GetBmApi;
import org.succlz123.doubanbooklog.dao.ReviewsApi;
import org.succlz123.doubanbooklog.support.com.shamanland.fab.FloatingActionButton;
import org.succlz123.doubanbooklog.support.com.shamanland.fab.ShowHideOnScroll;
import org.succlz123.doubanbooklog.support.xlistview.me.maxwin.view.XListView;
import org.succlz123.doubanbooklog.ui.activity.SetAnnotationActivity;
import org.succlz123.doubanbooklog.ui.activity.SetReviewsActivity;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* Created by fashi on 2015/4/3.
*/
public class ReviewsFragment extends Fragment {
private XListView xListView;
private FloatingActionButton fab;
private DbCollection dbCollection;
private List<ReviewsResult> reviewsResult;
private ReviewsObject reviewsObject;
private int start;
private Boolean loadMoreBoolean;
private TextView none;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.reviews_fragment, container, false);
Intent intent = getActivity().getIntent();
dbCollection = (DbCollection) intent.getParcelableExtra("book_info");
xListView = (XListView) view.findViewById(R.id.reviews_xlistview);
none=(TextView)view.findViewById(R.id.reviews_none);
fab = (FloatingActionButton) view.findViewById(R.id.reviews_fab);//浮动的imagebutton
fab.setShadow(true);
fab.setColor(Color.parseColor("#0097a7"));
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), SetReviewsActivity.class);
startActivityForResult(intent, 2);
}
});
// new ReviewsAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new ReviewsAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
xListView.setOnTouchListener(new ShowHideOnScroll(fab));//把xlistview和浮动imagebutton组合
xListView.setPullLoadEnable(false);//默认不显示xlistview
xListView.setPullRefreshEnable(true);//默认xlistview使用上下拉刷新
xListView.setAdapter(baseAdapter);
xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ReviewsResult reviewsResult = reviewsObject.getReviewsResult().get(position - xListView.getHeaderViewsCount());
ReviewsDialogFragment reviewsDialogFragment = ReviewsDialogFragment.newInstance(reviewsResult);
// reviewsDialogFragment.show(getFragmentManager(), "");
getActivity().getSupportFragmentManager()
.beginTransaction()
.add(R.id.reviews_fragment, reviewsDialogFragment)
.addToBackStack("")//自动处理fragment的返回键
.commitAllowingStateLoss();
}
});
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
reFresh();
}
@Override
public void onLoadMore() {
loadMore();
}
});
return view;
}
BaseAdapter baseAdapter = new BaseAdapter() {
@Override
public int getCount() {
if (reviewsObject != null) {
return reviewsObject.getItemcount();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.reviews_listview_item, parent, false);
} else {
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.reviews_item_imageView);
TextView title = (TextView) convertView.findViewById(R.id.reviews_item_title);
TextView name = (TextView) convertView.findViewById(R.id.reviews_item_name);
RatingBar ratingbar = (RatingBar) convertView.findViewById(R.id.reviews_item_ratingbar);
TextView time = (TextView) convertView.findViewById(R.id.reviews_item_time);
TextView useful = (TextView) convertView.findViewById(R.id.reviews_item_useful);
TextView text = (TextView) convertView.findViewById(R.id.reviews_item_text);
reviewsResult = reviewsObject.getReviewsResult();
ReviewsResult reviewsResults = reviewsResult.get(position);
new ImageViewAsyncTask(imageView, reviewsResults).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
title.setText((position + 1) + ". " + reviewsResults.getTitle());
name.setText(reviewsResults.getReviewsUser().getName());
ratingbar.setMax(reviewsResults.getReviewsRating().getMax());
ratingbar.setProgress(reviewsResults.getReviewsRating().getValue());
time.setText(reviewsResults.getCreate_time().substring(0, 10));
useful.setText(reviewsResults.getUseful_count() + "人认为有用");
text.setText(reviewsResults.getText());
return convertView;
}
};
private class ReviewsAsyncTask extends AsyncTask<Void, Void, ReviewsObject> {
private int id;
@Override
protected void onPreExecute() {
super.onPreExecute();
id = dbCollection.getBook_id();
}
@Override
protected ReviewsObject doInBackground(Void... params) {
return ReviewsApi.GetReveiws(id, 0);
}
@Override
protected void onPostExecute(ReviewsObject aVoid) {
super.onPostExecute(aVoid);
reviewsObject = aVoid;
baseAdapter.notifyDataSetChanged();
reset();
loadMoreBoolean = aVoid.getReviewsResult().size() <reviewsObject.getTotal();
xListView.setPullLoadEnable(loadMoreBoolean);
if (aVoid.getTotal() == 0) {
none.setVisibility(View.VISIBLE);
}
}
}
private class ImageViewAsyncTask extends AsyncTask<Void, Void, Bitmap> {
private ImageView imageView;
private ReviewsResult reviewsResult;
public ImageViewAsyncTask(ImageView imageView, ReviewsResult reviewsResult) {
this.imageView = imageView;
this.reviewsResult = reviewsResult;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Bitmap doInBackground(Void... params) {
return GetBmApi.getBitMap(reviewsResult.getReviewsUser().getAvatar().toString());
}
@Override
protected void onPostExecute(Bitmap aVoid) {
super.onPostExecute(aVoid);
imageView.setImageBitmap(aVoid);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
}
}
private class LoadMoreAsyncTask extends AsyncTask<Void, Void, ReviewsObject> {
private int id;
private int xx;
@Override
protected void onPreExecute() {
super.onPreExecute();
id = dbCollection.getBook_id();
start=xx+30;
}
@Override
protected ReviewsObject doInBackground(Void... params) {
return ReviewsApi.GetReveiws(id,start);
}
@Override
protected void onPostExecute(ReviewsObject aVoid) {
super.onPostExecute(aVoid);
xx=start;
reviewsObject.getReviewsResult().addAll(aVoid.getReviewsResult());
//把新刷新出来的数据 加入到上面去 然后刷新listview
baseAdapter.notifyDataSetChanged();
reset();
loadMoreBoolean=reviewsObject.getReviewsResult().size()>=reviewsObject.getTotal();
xListView.setPullLoadEnable(!loadMoreBoolean);
}
}
private void reset() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss ");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String str = formatter.format(curDate);
xListView.stopRefresh();
xListView.stopLoadMore();
xListView.setRefreshTime(str);
}
private void reFresh() {
new ReviewsAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private void loadMore() {
new LoadMoreAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}