因此,我試圖根據回收視圖的onBindViewHolder
方法更改ImageView
的高度,具體取決於同一視圖持有者中另一個對象的高度。當我通過getHeight()
訪問高度時,前幾個元素的結果爲0,這很可能是因爲它們現在沒有被繪製。在回收視圖中訪問對象的正確高度
的general solution這個問題不適合我的工作,因爲回收視圖創建和綁定了很多意見加入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?