RecyclerView itemView OnGlobalLayoutListener不会为所有itemViews触发

时间:2015-10-15 22:19:51

标签: android android-recyclerview android-viewholder

我的视图持有者构造函数中有一个RecyclerView我正在添加一个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。这是为什么?如何捕获这些项目的监听器?

1 个答案:

答案 0 :(得分:11)

注册一个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
}
});