RecyclerView的Adapter绑定多类型ViewHolder

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

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值