我使用的recyclerview有20行计数。每行都有唯一的行类型。
getItemViewType (int index) {
return index;
}
滚动时我想获得第10个项目的位置。我使用setOnScrollListener
方法来监听滚动。下面的代码在onScrolled
回调中起作用。
if(womanDetailViewHolder == null)
return;
womanDetailViewHolder.rowLayout. getLocationOnScreen(out);
Log.i("LOG1", " X: " + out[0] + " Y: " + out[1]);
womanDetailViewHolder已创建但未显示,y为0。但是我希望该值大于屏幕的高度。当womanDetailViewHolder在屏幕上可见时,y符合预期。然后,我滚动到第18-20行,y再次变为0。我希望该值小于-1 * screenHeight。
我错了吗?或者我该如何修正这些值?
答案 0 :(得分:2)
RecyclerView
在屏幕上只有可见的视图。所有屏幕外的ViewHolder
都被分离并存储在RecyclerView.RecycledViewPool
中,直到再次可见。同时,它们根本没有布置。
以itemViewType
返回位置违反了整个ViewHolder
模式,因此切勿使用。
您需要使用商品的高度(假设它们具有相同的大小)和当前可见商品的位置或RecyclerView滚动值来手动计算距离。