package com.example.jingbin.cloudreader.adapter; import android.content.Context; import android.databinding.DataBindingUtil; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.jingbin.cloudreader.MainActivity; import com.example.jingbin.cloudreader.R; import com.example.jingbin.cloudreader.bean.book.BooksBean; import com.example.jingbin.cloudreader.databinding.FooterItemBookBinding; import com.example.jingbin.cloudreader.databinding.HeaderItemBookBinding; import com.example.jingbin.cloudreader.databinding.ItemBookBinding; import com.example.jingbin.cloudreader.ui.book.child.BookDetailActivity; import com.example.jingbin.cloudreader.utils.PerfectClickListener; import java.util.ArrayList; import java.util.List; /** * Created by jingbin on 2016/12/15. */ public class BookAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private MainActivity context; private int status = 1; public static final int LOAD_MORE = 0; public static final int LOAD_PULL_TO = 1; public static final int LOAD_NONE = 2; private static final int LOAD_END = 3; private static final int TYPE_TOP = -1; private static final int TYPE_FOOTER_BOOK = -2; private static final int TYPE_HEADER_BOOK = -3; private static final int TYPE_CONTENT_BOOK = -4; private List<BooksBean> list; public BookAdapter(Context context) { this.context = (MainActivity) context; list = new ArrayList<>(); } @Override public int getItemViewType(int position) { if (position == 0) { return TYPE_HEADER_BOOK; } else if (position + 1 == getItemCount()) { return TYPE_FOOTER_BOOK; } else { return TYPE_CONTENT_BOOK ; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case TYPE_HEADER_BOOK: HeaderItemBookBinding mBindHeader = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.header_item_book, parent, false); return new HeaderViewHolder(mBindHeader.getRoot()); case TYPE_FOOTER_BOOK: FooterItemBookBinding mBindFooter = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.footer_item_book, parent, false); return new FooterViewHolder(mBindFooter.getRoot()); default: ItemBookBinding mBindBook = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_book, parent, false); return new BookViewHolder(mBindBook.getRoot()); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof HeaderViewHolder) { HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; headerViewHolder.bindItem(); } else if (holder instanceof FooterViewHolder) { FooterViewHolder footerViewHolder = (FooterViewHolder) holder; footerViewHolder.bindItem(); } else if (holder instanceof BookViewHolder) { BookViewHolder bookViewHolder = (BookViewHolder) holder; if (list != null && list.size() > 0) { // 内容从"1"开始 // DebugUtil.error("------position: "+position); bookViewHolder.bindItem(list.get(position - 1), position-1); } } } @Override public int getItemCount() { return list.size() + 2; } /** * 处理 GridLayoutManager 添加头尾布局占满屏幕宽的情况 */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); if (manager instanceof GridLayoutManager) { final GridLayoutManager gridManager = ((GridLayoutManager) manager); gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return (isHeader(position) || isFooter(position)) ? gridManager.getSpanCount() : 1; } }); } } /** * 处理 StaggeredGridLayoutManager 添加头尾布局占满屏幕宽的情况 */ @Override public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { super.onViewAttachedToWindow(holder); ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); if (lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams && (isHeader(holder.getLayoutPosition()) || isFooter(holder.getLayoutPosition()))) { StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; p.setFullSpan(true); } } /** * 这里规定 position = 0 时 * 就为头布局,设置为占满整屏幕宽 */ private boolean isHeader(int position) { return position >= 0 && position < 1; } /** * 这里规定 position = getItemCount() - 1时 * 就为尾布局,设置为占满整屏幕宽 * getItemCount() 改了 ,这里就不用改 */ private boolean isFooter(int position) { return position < getItemCount() && position >= getItemCount() - 1; } /** * footer view */ private class FooterViewHolder extends RecyclerView.ViewHolder { FooterItemBookBinding mBindFooter; FooterViewHolder(View itemView) { super(itemView); mBindFooter = DataBindingUtil.getBinding(itemView); mBindFooter.rlMore.setGravity(Gravity.CENTER); // LinearLayoutCompat.LayoutParams params = new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ScreenUtils.dipToPx(context, 40)); // itemView.setLayoutParams(params); } private void bindItem() { switch (status) { case LOAD_MORE: mBindFooter.progress.setVisibility(View.VISIBLE); mBindFooter.tvLoadPrompt.setText("正在加载..."); itemView.setVisibility(View.VISIBLE); break; case LOAD_PULL_TO: mBindFooter.progress.setVisibility(View.GONE); mBindFooter.tvLoadPrompt.setText("上拉加载更多"); itemView.setVisibility(View.VISIBLE); break; case LOAD_NONE: System.out.println("LOAD_NONE----"); mBindFooter.progress.setVisibility(View.GONE); mBindFooter.tvLoadPrompt.setText("没有更多内容了"); break; case LOAD_END: itemView.setVisibility(View.GONE); default: break; } } } private class HeaderViewHolder extends RecyclerView.ViewHolder { HeaderItemBookBinding mBindBook; HeaderViewHolder(View view) { super(view); mBindBook = DataBindingUtil.getBinding(view); } private void bindItem() { // mBindBook.setBean(book); // mBindBook.executePendingBindings(); } } public void updateLoadStatus(int status) { this.status = status; notifyDataSetChanged(); } public int getLoadStatus(){ return this.status; } private class BookViewHolder extends RecyclerView.ViewHolder { ItemBookBinding mBindBook; BookViewHolder(View view) { super(view); mBindBook = DataBindingUtil.getBinding(view); } private void bindItem(final BooksBean book, int position) { mBindBook.setBean(book); mBindBook.executePendingBindings(); mBindBook.llItemTop.setOnClickListener(new PerfectClickListener() { @Override protected void onNoDoubleClick(View v) { BookDetailActivity.start(context,book,mBindBook.ivTopPhoto); } }); // ViewGroup.LayoutParams params=iVFilm.getLayoutParams(); // int width= ScreenUtils.getScreenWidthDp(context); // int ivWidth=(width-ScreenUtils.dipToPx(context,80))/3; // params.width=ivWidth; // double height=(420.0/300.0)*ivWidth; // params.height=(int)height; // iVFilm.setLayoutParams(params); } } public List<BooksBean> getList() { return list; } public void setList(List<BooksBean> list) { this.list.clear(); this.list = list; } public void addAll(List<BooksBean> list) { this.list.addAll(list); } }