【发布时间】:2016-03-20 18:43:35
【问题描述】:
所以,我正在尝试根据同一视图持有者中另一个对象的高度,在我的回收站视图的 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?
【问题讨论】:
标签: android android-layout android-recyclerview android-viewholder