假设现在我们要获取RecyclerView中指定位置(position)的ItemView,大部分的文章是这么建议的:
int position;
LinearLayoutManager layoutMgr;
int firstPosition = layoutMgr.findFirstVisibleItemPosition();
View v = layoutMgr.getChildAt(position - firstPosition);
基本的思路是,先获取当前Window中第一个可见Item的position,然后计算指定位置距离这个可见位置的偏移量,最后通过getChildAt获取指定位置的ItemView。
在API 25.1.0中,我们发现LayoutManager计算逻辑并不是这样的。layoutMgr.findFirstVisibleItemPosition()获取到的位置,实际就是字面的意思,即是LayoutManager在Recycler中找到的第一个可见的Item。特别是如果position不在可视区域,需要RecyclerView先执行一个滚动时,第一个可见的Item不一定是RecyclerView的第一个Child,在计算position-firstPosition时候会产生偏移量错误。
要获取正确的位置,我采用的是这样的逻辑:
首先为每一个ItemView setTag,内容是这个Item在RecyclerView当中的position,在RecyclerViewAdapter中:
@Override
public void onBindViewHolder(..., int position){
ViewHolder vHol