RecyclerView的Adapter绑定多类型ViewHolder
具体流程
1、与一般Adapter的处理流程类似
2、覆盖Adapter的getItemViewType(int position),通过自定义设置不同位置的View的类型。
3、在onCreateViewHolder(ViewGroup parent, int viewType)中对不同的View类型创建不同的ViewHolder。
使用场景
需要在RecyclerView列表的顶部(中间、底部)增加必要的视图。
注意事项
在getItemCount()方法中要注意返回的数量,可能不在是主要数据的个数了,具体看目标view的设计。
扩展
1. 通过RecyclerView获取指定position的ViewHolder
一般使用以下方法就能获取:
RecyclerView.findViewHolderForAdapterPosition(int position);
具体代码如下:
public ViewHolder getHolder(RecyclerView container, int position) {
if (position < 0 || container.getAdapter == null) return null;
int count = container.getAdapter().getItemCount();
if (position >= count) return null;
return container.findViewHolderForAdapterPosition(position);
}
2. 判断是否滚动至顶部或底部
需要用到以下两个方法:
LayoutManager.findFirstVisibleItemPosition(); // 获取当前可见的第一个ItemView所在列表的位置
LayoutManager.findLastVisibleItemPosition(); // 获取当前可见的最后一个ItemView所在列表的位置
判断是否到达顶部的方法:
public boolean isScrollToTop(RecyclerView container) {
if (container.getAdapter == null) return false;
return container.getLayoutManager().findFirstVisibleItemPosition() == 0;
}
判断是否到达底部的方法:
public boolean isScrollToBottom(RecyclerView container) {
LinearLayoutManager manager = (LinearLayoutManager) container.getLayoutManager();
//当前屏幕所看到的子项个数
int visibleCount = manager.getChildCount();
//当前RecyclerView的所有子项个数
int totalCount = manager.getItemCount();
if (visibleCount == totalItemCount) return true;
//屏幕中最后一个可见子项的position
int lastVisiblePosition = layoutManager.findLastVisibleItemPosition();
//RecyclerView的滑动状态
int state = recyclerView.getScrollState();
if (lastVisiblePosition == totalCount - 1 && state == container.SCROLL_STATE_IDLE) {
return true;
} else {
return false;
}
}
RecyclerView Adapter与多类型ViewHolder绑定

本文介绍了如何在RecyclerView的Adapter中绑定多类型ViewHolder,包括具体流程、使用场景、注意事项。扩展内容讨论了如何通过RecyclerView获取指定位置的ViewHolder以及判断是否滚动到顶部或底部的方法。
688

被折叠的 条评论
为什么被折叠?



