parent
bf84559ef2
commit
2d6277e6e7
@ -1,183 +0,0 @@ |
||||
package com.novel.read.adapter; |
||||
|
||||
import android.content.Context; |
||||
import android.content.Intent; |
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
import android.widget.ImageView; |
||||
import android.widget.TextView; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.recyclerview.widget.LinearLayoutManager; |
||||
import androidx.recyclerview.widget.RecyclerView; |
||||
|
||||
import com.novel.read.R; |
||||
import com.novel.read.activity.NovelBookDetailActivity; |
||||
import com.novel.read.adapter.holder.EmptyHolder; |
||||
import com.novel.read.adapter.holder.MoreHolder; |
||||
import com.novel.read.constants.Constant; |
||||
import com.novel.read.inter.OnLoadMoreListener; |
||||
import com.novel.read.model.protocol.SearchResp; |
||||
import com.novel.read.utlis.GlideImageLoader; |
||||
|
||||
import java.util.List; |
||||
import static com.novel.read.constants.Constant.COMMENT_SIZE; |
||||
|
||||
public class SearchAdapter extends RecyclerView.Adapter { |
||||
|
||||
private List<SearchResp.BookBean> mList; |
||||
private Context mContext; |
||||
private final int VALUE_ITEM = 100; //正常item
|
||||
private final int BOOK_ITEM = 102; //书本item
|
||||
private final int EMPTY_ITEM = 101; //空白item
|
||||
private boolean book = false; |
||||
private OnItemClickListener mClickListener; |
||||
|
||||
private final int PROCESS_ITEM = 103; //加载更多
|
||||
private boolean loadingMore; |
||||
private int lastVisibleItem, totalItemCount; |
||||
private int visibleThreshold = 1; |
||||
private OnLoadMoreListener mOnLoadMoreListener; |
||||
|
||||
public SearchAdapter(List<SearchResp.BookBean> mList, RecyclerView recyclerView) { |
||||
this.mList = mList; |
||||
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) { |
||||
final LinearLayoutManager llMangager = (LinearLayoutManager) recyclerView.getLayoutManager(); |
||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { |
||||
@Override |
||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { |
||||
super.onScrolled(recyclerView, dx, dy); |
||||
totalItemCount = llMangager.getItemCount(); |
||||
lastVisibleItem = llMangager.findLastVisibleItemPosition(); |
||||
if (!loadingMore && totalItemCount == (lastVisibleItem + visibleThreshold) && totalItemCount >= (COMMENT_SIZE)) { |
||||
if (mOnLoadMoreListener != null) { |
||||
mOnLoadMoreListener.onLoadMore(); |
||||
} |
||||
} |
||||
} |
||||
}); |
||||
|
||||
} |
||||
} |
||||
|
||||
|
||||
public void setLoadingMore(boolean loadingMore) { |
||||
this.loadingMore = loadingMore; |
||||
} |
||||
|
||||
public boolean isLoadingMore() { |
||||
return loadingMore; |
||||
} |
||||
|
||||
public void setOnLoadMoreListener(OnLoadMoreListener listener) { |
||||
this.mOnLoadMoreListener = listener; |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { |
||||
if (mContext == null) { |
||||
mContext = viewGroup.getContext(); |
||||
} |
||||
View view; |
||||
if (i == VALUE_ITEM) { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.rlv_item_search, viewGroup, false); |
||||
return new ViewHolder(view); |
||||
} else if (i == BOOK_ITEM) { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.rlv_item_book_list_search, viewGroup, false); |
||||
return new BookHolder(view); |
||||
} else if (i == EMPTY_ITEM) { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.rlv_empty_view, viewGroup, false); |
||||
return new EmptyHolder(view); |
||||
} else if (i == PROCESS_ITEM) { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.load_more_layout, viewGroup, false); |
||||
return new MoreHolder(view); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { |
||||
if (viewHolder instanceof ViewHolder) { |
||||
SearchResp.BookBean bookBean = mList.get(i); |
||||
((ViewHolder) viewHolder).mTvBookName.setText(bookBean.getTitle()); |
||||
viewHolder.itemView.setOnClickListener(view -> mClickListener.onItemClick(view, i)); |
||||
} else if (viewHolder instanceof BookHolder) { |
||||
SearchResp.BookBean bookBean = mList.get(i); |
||||
((BookHolder) viewHolder).tvBookName.setText(bookBean.getTitle()); |
||||
((BookHolder) viewHolder).tvBookAuthor.setText(bookBean.getAuthor()); |
||||
((BookHolder) viewHolder).tvBookDescription.setText(bookBean.getDescription()); |
||||
GlideImageLoader.INSTANCE.displayCornerImage(mContext, bookBean.getCover(), ((BookHolder) viewHolder).ivBook); |
||||
viewHolder.itemView.setOnClickListener(view -> { |
||||
Intent intent = new Intent(mContext, NovelBookDetailActivity.class); |
||||
intent.putExtra(Constant.Bundle.BookId, bookBean.getId()); |
||||
mContext.startActivity(intent); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public int getItemCount() { |
||||
if (mList.size() == 0) { |
||||
return 1; |
||||
} |
||||
return mList.size(); |
||||
} |
||||
|
||||
@Override |
||||
public int getItemViewType(int position) { |
||||
if (mList == null || mList.size() == 0) { |
||||
return EMPTY_ITEM; |
||||
} else { |
||||
if (mList.get(position) == null) { |
||||
return PROCESS_ITEM; |
||||
} |
||||
if (book) { |
||||
return BOOK_ITEM; |
||||
|
||||
} else { |
||||
return VALUE_ITEM; |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
public void setHolderType(boolean book) { |
||||
this.book = book; |
||||
notifyDataSetChanged(); |
||||
} |
||||
|
||||
static class ViewHolder extends RecyclerView.ViewHolder { |
||||
TextView mTvBookName; |
||||
|
||||
public ViewHolder(@NonNull View itemView) { |
||||
super(itemView); |
||||
mTvBookName = itemView.findViewById(R.id.tv_book_name); |
||||
} |
||||
} |
||||
|
||||
static class BookHolder extends RecyclerView.ViewHolder { |
||||
ImageView ivBook; |
||||
TextView tvBookName; |
||||
TextView tvBookAuthor; |
||||
TextView tvBookDescription; |
||||
|
||||
public BookHolder(@NonNull View itemView) { |
||||
super(itemView); |
||||
ivBook = itemView.findViewById(R.id.iv_book); |
||||
tvBookName = itemView.findViewById(R.id.tv_book_name); |
||||
tvBookAuthor = itemView.findViewById(R.id.tv_book_author); |
||||
tvBookDescription = itemView.findViewById(R.id.tv_book_description); |
||||
} |
||||
} |
||||
|
||||
public void setOnItemClickListener(OnItemClickListener mListener) { |
||||
this.mClickListener = mListener; |
||||
} |
||||
|
||||
|
||||
public interface OnItemClickListener { |
||||
void onItemClick(View view, int pos); |
||||
} |
||||
} |
@ -0,0 +1,168 @@ |
||||
package com.novel.read.adapter |
||||
|
||||
import android.content.Context |
||||
import android.content.Intent |
||||
import android.view.LayoutInflater |
||||
import android.view.View |
||||
import android.view.ViewGroup |
||||
import android.widget.ImageView |
||||
import android.widget.TextView |
||||
import androidx.recyclerview.widget.LinearLayoutManager |
||||
import androidx.recyclerview.widget.RecyclerView |
||||
|
||||
import com.novel.read.R |
||||
import com.novel.read.activity.NovelBookDetailActivity |
||||
import com.novel.read.adapter.holder.EmptyHolder |
||||
import com.novel.read.adapter.holder.MoreHolder |
||||
import com.novel.read.constants.Constant |
||||
import com.novel.read.inter.OnLoadMoreListener |
||||
import com.novel.read.model.protocol.SearchResp |
||||
import com.novel.read.utlis.GlideImageLoader |
||||
import com.novel.read.constants.Constant.COMMENT_SIZE |
||||
|
||||
class SearchAdapter(private val mList: List<SearchResp.BookBean>, recyclerView: RecyclerView) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { |
||||
|
||||
private var mContext: Context? = null |
||||
|
||||
private var book = false |
||||
private var mClickListener: OnItemClickListener? = null |
||||
|
||||
var isLoadingMore: Boolean = false |
||||
private var lastVisibleItem: Int = 0 |
||||
private var totalItemCount: Int = 0 |
||||
private val visibleThreshold = 1 |
||||
private var mOnLoadMoreListener: OnLoadMoreListener? = null |
||||
|
||||
init { |
||||
if (recyclerView.layoutManager is LinearLayoutManager) { |
||||
val llMangager = recyclerView.layoutManager as LinearLayoutManager? |
||||
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { |
||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { |
||||
super.onScrolled(recyclerView, dx, dy) |
||||
totalItemCount = llMangager!!.itemCount |
||||
lastVisibleItem = llMangager.findLastVisibleItemPosition() |
||||
if (!isLoadingMore && totalItemCount == lastVisibleItem + visibleThreshold && totalItemCount >= COMMENT_SIZE) { |
||||
if (mOnLoadMoreListener != null) { |
||||
mOnLoadMoreListener!!.onLoadMore() |
||||
} |
||||
} |
||||
} |
||||
}) |
||||
|
||||
} |
||||
} |
||||
|
||||
fun setOnLoadMoreListener(listener: OnLoadMoreListener) { |
||||
this.mOnLoadMoreListener = listener |
||||
} |
||||
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): RecyclerView.ViewHolder { |
||||
if (mContext == null) { |
||||
mContext = viewGroup.context |
||||
} |
||||
val view: View |
||||
when (i) { |
||||
VALUE_ITEM -> { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.rlv_item_search, viewGroup, false) |
||||
return ViewHolder(view) |
||||
} |
||||
BOOK_ITEM -> { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.rlv_item_book_list_search, viewGroup, false) |
||||
return BookHolder(view) |
||||
} |
||||
EMPTY_ITEM -> { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.rlv_empty_view, viewGroup, false) |
||||
return EmptyHolder(view) |
||||
} |
||||
PROCESS_ITEM -> { |
||||
view = LayoutInflater.from(mContext).inflate(R.layout.load_more_layout, viewGroup, false) |
||||
return MoreHolder(view) |
||||
} |
||||
else -> throw IllegalArgumentException() |
||||
} |
||||
} |
||||
|
||||
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, i: Int) { |
||||
when (viewHolder) { |
||||
is ViewHolder -> { |
||||
val bookBean = mList[i] |
||||
viewHolder.mTvBookName.text = bookBean.title |
||||
viewHolder.itemView.setOnClickListener { view -> mClickListener!!.onItemClick(view, i) } |
||||
} |
||||
is BookHolder -> { |
||||
val bookBean = mList[i] |
||||
viewHolder.tvBookName.text = bookBean.title |
||||
viewHolder.tvBookAuthor.text = bookBean.author |
||||
viewHolder.tvBookDescription.text = bookBean.description |
||||
GlideImageLoader.displayCornerImage(mContext!!, bookBean.cover!!, viewHolder.ivBook) |
||||
viewHolder.itemView.setOnClickListener { view -> |
||||
val intent = Intent(mContext, NovelBookDetailActivity::class.java) |
||||
intent.putExtra(Constant.Bundle.BookId, bookBean.id) |
||||
mContext!!.startActivity(intent) |
||||
} |
||||
} |
||||
is MoreHolder -> viewHolder.bindModule(isLoadingMore) |
||||
} |
||||
} |
||||
|
||||
override fun getItemCount(): Int { |
||||
return if (mList.isEmpty()) { |
||||
1 |
||||
} else mList.size+1 |
||||
} |
||||
|
||||
override fun getItemViewType(position: Int): Int { |
||||
if (position == itemCount - 1) { |
||||
return PROCESS_ITEM |
||||
} |
||||
|
||||
return if (mList.isEmpty()) { |
||||
EMPTY_ITEM |
||||
} else { |
||||
if (book) { |
||||
BOOK_ITEM |
||||
} else { |
||||
VALUE_ITEM |
||||
} |
||||
} |
||||
} |
||||
|
||||
fun setHolderType(book: Boolean) { |
||||
this.book = book |
||||
notifyDataSetChanged() |
||||
} |
||||
|
||||
internal class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { |
||||
var mTvBookName: TextView = itemView.findViewById(R.id.tv_book_name) |
||||
|
||||
} |
||||
|
||||
internal class BookHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { |
||||
var ivBook: ImageView = itemView.findViewById(R.id.iv_book) |
||||
var tvBookName: TextView = itemView.findViewById(R.id.tv_book_name) |
||||
var tvBookAuthor: TextView = itemView.findViewById(R.id.tv_book_author) |
||||
var tvBookDescription: TextView = itemView.findViewById(R.id.tv_book_description) |
||||
|
||||
} |
||||
|
||||
fun setOnItemClickListener(mListener: OnItemClickListener) { |
||||
this.mClickListener = mListener |
||||
} |
||||
|
||||
|
||||
interface OnItemClickListener { |
||||
fun onItemClick(view: View, pos: Int) |
||||
} |
||||
|
||||
companion object { |
||||
|
||||
private const val VALUE_ITEM = 100 //正常item |
||||
|
||||
private const val EMPTY_ITEM = 101 //空白item |
||||
|
||||
private const val BOOK_ITEM = 102 //书本item |
||||
|
||||
private const val PROCESS_ITEM = 103 |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue