原因是RecyclerView还没有绘制完,需要重写addOnGlobalLayoutListener,等待view绘制完毕再获取item布局
mListBind.recyData.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//因为onGlobalLayout可能会多次调用,所以记得移除监听
mListBind.recyData.getViewTreeObserver().removeOnGlobalLayoutListener(this);
View itemView = viewPagerLayoutManager.findViewByPosition(position);
}
});
但这样依然存在获取到的子布局为空的现象,后来查询资料,才知道,因为onGlobalLayout可能会被多次调用,有些调用甚至是在view绘制准备就绪之前,所以,我们可以通过view的宽高来做判断
mListBind.recyData.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//因为onGlobalLayout可能会多次调用,所以记得移除监听
int width = mListBind.recyData.getWidth();
int height = mListBind.recyData.getHeight();
//通过调用view.getHeight()和view.getWidth()来判断view是否已经绘制好
if (width > 0 && height > 0) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
mListBind.recyData.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
mListBind.recyData.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
} else {
return;
}
View itemView = viewPagerLayoutManager.findViewByPosition(position);
}
});
针不戳鸭