2015-10-15 13 views
9

ich ein RecyclerView in deren Ansicht Inhaber Konstruktor Ich füge eine onGlobalLayoutListener wie folgtRecyclerView itemView OnGlobalLayoutListener feuert nicht für alle itemViews

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

Diese Brände für alle itemViews die auf dem Bildschirm sichtbar sind, aber Wenn ich die RecyclerView scrolle, feuert es nicht für die itemViews, die auf dem Bildschirm erscheinen. Warum das? Wie kann ich diesen Listener für diese Objekte erfassen?

+0

Überschreibung 'onLayout' Ihrer' itemView' – pskink

Antwort

8

ein OnLayoutChangeListener wie dieses Register:

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 
} 
}); 
+3

Gib mir Gründe, warum ich diese statt 'ViewTreeObserver' verwenden sollten, bitte. – deadfish