gpt4 book ai didi

android - RecyclerView LayoutManager findViewByPosition 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:08 26 4
gpt4 key购买 nike

我对获取 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) 调用时:

  1. 您的 RecyclerView 的 Adapter 至少有一个数据元素。
  2. View 位置 0 当前在 RecyclerView
  3. 中可见

如果这能解决您的问题,请告诉我,如果不能,还有另一种方法可以满足您的需求。

关于android - RecyclerView LayoutManager findViewByPosition 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com