Ale*_*sky 8 android android-recyclerview
我对获得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
}
});
Run Code Online (Sandbox Code Playgroud)
但此时它返回null.
如果你正在使用OnGlobalLayoutListener你应该记住onGlobalLayout可以被多次调用。其中一些调用甚至可以在Layout 准备好之前发生(我所说的准备好View是指您可以通过调用view.getHeight()或来获取 a 的尺寸的那一刻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);
}
});
Run Code Online (Sandbox Code Playgroud)
除此之外,您还需要在致电时确保findViewByPosition(0):
RecyclerView's Adapter至少有一个数据元素。Viewat 位置0当前可见RecyclerView告诉我这是否可以解决您的问题,如果没有,还有另一种方法可以满足您的需求。
| 归档时间: |
|
| 查看次数: |
5820 次 |
| 最近记录: |