package org.succlz123.doubanbooklog.ui.mainfragment; import android.content.Intent; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.LruCache; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import org.succlz123.doubanbooklog.DoubanApplication; import org.succlz123.doubanbooklog.R; import org.succlz123.doubanbooklog.bean.bookinfo.DbCollection; import org.succlz123.doubanbooklog.bean.bookinfo.DbObject; import org.succlz123.doubanbooklog.bean.DbAccount; import org.succlz123.doubanbooklog.dao.BookInfoApi; import org.succlz123.doubanbooklog.dao.GetBmApi; import org.succlz123.doubanbooklog.support.xlistview.me.maxwin.view.XListView; import org.succlz123.doubanbooklog.ui.activity.ContentActivity; import org.succlz123.doubanbooklog.ui.login.LoginActivity; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * Created by fashi on 2015/3/27. */ public class ReadingFragment extends Fragment { private org.succlz123.doubanbooklog.support.xlistview.me.maxwin.view.XListView listView; private DbAccount account; private DbObject dbObject; private LruCache<DbCollection, Bitmap> lruCache; private int page; private String status = "reading"; private boolean isLoading = false; private boolean canLoadMore = false; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.reading_fragment, container, false); this.lruCache = new LruCache<DbCollection, Bitmap>(50); final Button login_btn = (Button) view.findViewById(R.id.login_btn); login_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getActivity(), LoginActivity.class); startActivityForResult(intent, 0); } } ); listView = (org.succlz123.doubanbooklog.support.xlistview.me.maxwin.view.XListView) view.findViewById(R.id.reading_list_view); listView.setAdapter(adapter); listView.setPullLoadEnable(false); listView.setPullRefreshEnable(true); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { DbCollection dbCollection = ReadingFragment.this.dbObject.getCollections().get(position - listView.getHeaderViewsCount());//因为listview里有个头尾 所以用它来获取list里的第一个 Intent intent = new Intent(getActivity(), ContentActivity.class); Bundle bundle = new Bundle(); bundle.putParcelable("book_info", dbCollection); intent.putExtras(bundle); startActivity(intent); } }); listView.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { refresh(); } @Override public void onLoadMore() { loadMore(); } }); this.account = DoubanApplication.getInstance().getAccount(); if (this.account == null) { login_btn.setVisibility(View.VISIBLE); } else { login_btn.setVisibility(View.INVISIBLE); refresh(); } DoubanApplication.getInstance().addAccountListener(new DoubanApplication.AccountChangeListener() { @Override public void onAccount(DbAccount account) { ReadingFragment.this.account = account; login_btn.setVisibility(View.INVISIBLE); refresh(); } }); return view; } BaseAdapter adapter = new BaseAdapter() { final int TYPE_DEFAULT = 0; @Override public int getCount() { if (ReadingFragment.this.dbObject != null) { return ReadingFragment.this.dbObject.getItemCount(); } return 0; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return TYPE_DEFAULT; } @Override public View getView(int i, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getActivity().getLayoutInflater().inflate(R.layout.reading_list_view_item, null, false); } else { } final ImageView imageView = (ImageView) convertView.findViewById(R.id.reading_list_view_item_img); TextView title = (TextView) convertView.findViewById(R.id.reading_list_view_item_bookname); TextView author = (TextView) convertView.findViewById(R.id.reading_list_view_item_writer); TextView info = (TextView) convertView.findViewById(R.id.reading_list_view_item_info); TextView updated = (TextView) convertView.findViewById(R.id.reading_list_view_item_time); TextView tag = (TextView) convertView.findViewById(R.id.reading_list_view_item_tag); final DbCollection dbCollection = ReadingFragment.this.dbObject.getCollections().get(i); Bitmap memoryCachedBitmap = ReadingFragment.this.lruCache.get(dbCollection); if (memoryCachedBitmap != null) { imageView.setImageBitmap(memoryCachedBitmap); } else { if (dbCollection.getBook().getImage() != null && !dbCollection.getBook().getImage().trim().equals("") && dbCollection.getBook().getImage().startsWith("http://")) { imageView.setTag(dbCollection); imageView.setImageBitmap(null); new Thread(new Runnable() { @Override public void run() { final Bitmap bitmap = GetBmApi.getBitMap(dbCollection.getBook().getImage()); getActivity().runOnUiThread(new Runnable() { @Override public void run() { Object tagObject = imageView.getTag(); if (tagObject == dbCollection&&bitmap!=null) { imageView.setImageBitmap(bitmap); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); ReadingFragment.this.lruCache.put(dbCollection, bitmap); } } }); } }).start(); } else { imageView.setImageBitmap(null); } } title.setText((i + 1) + "." + dbCollection.getBook().getTitle()); StringBuilder authorBuilder = new StringBuilder(); List<String> authors = dbCollection.getBook().getAuthor(); // for (String singleAuthor : authors) { // authorBuilder.append(" "); // authorBuilder.append(singleAuthor); // } for (int who = 0; who < authors.size(); who++) { if (who > 0) { authorBuilder.append(" "); } String singleAuthor = authors.get(who); authorBuilder.append(singleAuthor); }//输出获得的列表 author.setText(authorBuilder.toString()); info.setText(dbCollection.getBook().getPublisher() + " " + dbCollection.getBook().getPubdate() + " " + dbCollection.getBook().getPrice()); updated.setText(dbCollection.getUpdated() + " 在读"); // if (dbCollection.getBook().get() != null && book.getTag() != "") { // tag.setText("标签 " + book.getTag()); // } else { // tag.setVisibility(View.GONE); // } return convertView; } }; private void reset() { SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss "); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 String str = formatter.format(curDate); listView.stopRefresh(); listView.stopLoadMore(); listView.setRefreshTime(str); } private void refresh() { if (!isLoading) { isLoading = true; new RefreshAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } private void loadMore() { if (!isLoading && canLoadMore) { isLoading = true; new LoadMoreAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } private class RefreshAsyncTask extends AsyncTask<Void, Void, DbObject> { private String token; private Integer id; @Override protected void onPreExecute() { super.onPreExecute(); token = ReadingFragment.this.account.getAccess_token(); id = ReadingFragment.this.account.getDouban_user_id(); } @Override protected DbObject doInBackground(Void... params) { DbObject dbObject = BookInfoApi.getBooks(token, id, status, 0); return dbObject; } @Override protected void onPostExecute(DbObject result) { super.onPostExecute(result); isLoading = false; reset(); if (result == null || result.getItemCount() == 0) { return; } page = 0; ReadingFragment.this.dbObject = result; adapter.notifyDataSetChanged(); if (dbObject != null) { canLoadMore = dbObject.getItemCount() < dbObject.getTotal(); } listView.setPullLoadEnable(canLoadMore); } } private class LoadMoreAsyncTask extends AsyncTask<Void, Void, DbObject> { private String token; private Integer id; private int requestPage; @Override protected void onPreExecute() { super.onPreExecute(); token = ReadingFragment.this.account.getAccess_token(); id = ReadingFragment.this.account.getDouban_user_id(); requestPage = page + 20; } @Override protected DbObject doInBackground(Void... params) { DbObject dbObject = BookInfoApi.getBooks(token, id, status, requestPage); return dbObject; } @Override protected void onPostExecute(DbObject result) { super.onPostExecute(result); isLoading = false; reset(); if (result == null || result.getItemCount() == 0) { return; } page = requestPage; if (ReadingFragment.this.dbObject == null || ReadingFragment.this.dbObject.getItemCount() == 0) { ReadingFragment.this.dbObject = result; adapter.notifyDataSetChanged(); return; } ReadingFragment.this.dbObject.addOld(result); adapter.notifyDataSetChanged(); if (dbObject != null) { canLoadMore = dbObject.getItemCount() < dbObject.getTotal(); } listView.setPullLoadEnable(canLoadMore); } } }