getLocationOnScreen在recyclerview内部返回0

时间:2018-12-01 14:28:52

标签: android android-recyclerview recycler-adapter

我使用的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。

我错了吗?或者我该如何修正这些值?

1 个答案:

答案 0 :(得分:2)

RecyclerView在屏幕上只有可见的视图。所有屏幕外的ViewHolder都被分离并存储在RecyclerView.RecycledViewPool中,直到再次可见。同时,它们根本没有布置。

itemViewType返回位置违反了整个ViewHolder模式,因此切勿使用。

您需要使用商品的高度(假设它们具有相同的大小)和当前可见商品的位置或RecyclerView滚动值来手动计算距离。