android - RecyclerView itemView OnGlobalLayoutListener 不会为所有 itemView 触发

标签 android android-recyclerview android-viewholder

我有一个 RecyclerView,我在其 View 持有者构造函数中添加了一个 onGlobalLayoutListener,如下所示

public CustomViewHolder(final View itemView, Context context) {
    super(itemView, context);
    itemView.getViewTreeObserver().addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener() {
          @Override
          public void onGlobalLayout() {
            // Get height here
          }
     });
}

这会为屏幕上可见的所有 itemViews 触发,但是当我滚动 recyclerView 时,它不会为开始出现在屏幕上的 itemViews 触发屏幕。这是为什么?我如何为这些项目捕获此监听器?

最佳答案

像这样注册一个 OnLayoutChangeListener:

imageViewAvatar.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
       imageViewAvatar.removeOnLayoutChangeListener(this);
       // Get height here
}
});

关于android - RecyclerView itemView OnGlobalLayoutListener 不会为所有 itemView 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159492/

相关文章:

java - Youtube Android API - callingAppVersion 不能为 null 或为空

Android 谷歌地图版本 2 显示空白页面?

java - AsyncTask - 如何在 onPostExecute 之后将值传递回 Activity 类?

java - 随机整数 : Android

android - RecyclerView 不应该有太多的项目?

Android EditText 的容器(RecyclerView)在 EditText 聚焦时自动滚动

android - RecyclerView 获取点击的item详情 - Android

android - RecyclerView 添加/重新添加项目

java - 使用 View 持有者时,listView 中的行回收如何工作?

java - 适配器类错误。创建时不得附加 ViewHolder View