Итак, я пытаюсь изменить высоту ImageView
в методе моего ресайклера onBindViewHolder
в зависимости от высоты другого объекта в том же держателе. Когда я получаю доступ к высоте с getHeight()
, я возвращаюсь 0 в результате для первых нескольких элементов - скорее всего, потому, что они не нарисованы прямо сейчас.Доступ к правильной высоте объекта в ресайклере
general solution Эта проблема не работает для меня, поскольку просмотр recycler создает и связывает множество просмотров, добавляя GlobalLayoutListener
к каждому из них, что, кажется, испортит эту вещь, давая мне неправильные результаты (например, просто меняя высота первого элемента).
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ViewHolderDouble doubleHolder = (ViewHolderDouble) holder;
if (secProduct != null) {
final ViewTreeObserver observer = doubleHolder.linearLayoutSD.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int difference = doubleHolder.firstCardView.getHeight() - doubleHolder.secCardView.getHeight();
if (difference > 0) {
ImageView rightImage = doubleHolder.imageViewR;
rightImage.getLayoutParams().height = rightImage.getHeight() + difference;
rightImage.requestLayout();
} else if (difference < 0) {
ImageView leftImage = doubleHolder.imageViewL;
leftImage.getLayoutParams().height = leftImage.getHeight() + (difference * -1);
leftImage.requestLayout();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
doubleHolder.linearLayoutSD.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
doubleHolder.linearLayoutSD.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
}
}
Есть ли способ, что я могу получить доступ к высоте doubleHolder.firstCardView
& doubleHolder.secCardView
после мнения нарисованы, так что я получаю правильную высоту и не 0?