我对获取 RecyclerView 第一项的大小的正确和第一个可能时刻感兴趣?
我试过使用:
recyclerView.setLayoutManager(new GridLayoutManager(context, 2));
recyclerView.setAdapter(new MyDymmyGridRecyclerAdapter(context));
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
View firstRecyclerViewItem = recyclerView.getLayoutManager().findViewByPosition(0);
// firstRecyclerViewItem is null here
}
});
但此时返回null。
最佳答案
如果您正在使用 OnGlobalLayoutListener
,您应该记住 onGlobalLayout
可以被多次调用。其中一些调用甚至可能在 Layout
准备就绪 之前发生(准备就绪 我的意思是您可以获得 尺寸的那一刻通过调用
。因此,实现您的方法的正确方法是:view.getHeight()
或 view.getWidth()
查看
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int width = recyclerView.getWidth();
int height = recyclerView.getHeight();
if (width > 0 && height > 0) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
View firstRecyclerViewItem = recyclerView.getLayoutManager().findViewByPosition(0);
}
});
除此之外,您还需要确保在 findViewByPosition(0)
调用时:
- 您的
RecyclerView 的
Adapter
至少有一个数据元素。 View
位置0
当前在RecyclerView
中可见
如果这能解决您的问题,请告诉我,如果不能,还有另一种方法可以满足您的需求。
关于android - RecyclerView LayoutManager findViewByPosition 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579097/