我碰巧遇到了一个小问题。在我的项目中,我使用DataBinding
和RecyclerView
将数据绑定到ViewHolder
并显示它。问题是:在第一次绑定TextView
时,宽度比其中的文本大得多(layout_width
设置为wrap_content
)。
这是我的XML代码。
<LinearLayout
android:id="@+id/messageBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.7"
android:gravity="center_vertical"
android:paddingLeft='@{same?@dimen/four:@dimen/zero}'
android:paddingRight='@{(mess.isMine && same)?@dimen/four:@dimen/zero}'
android:text='@{mess.message,default = "Message"}'
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:textColor="@color/black"
android:textSize="14sp" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.35"
android:gravity="bottom|end"
android:layout_gravity="bottom|end"
android:lines="1"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text='@{Utils.parseMillsToHoursAndMins(mess.date,true,true),default = "14:22"}'
android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
android:textSize="12sp"/>
</LinearLayout>
在onBindViewHoder中我只是调用holder.binding.setVariable(..),所以没什么特别的。
我附上了两张带有结果的图片。拳头 - 第一个绑定。第二个 - 滚动上下之后。
@Override
public void onBindViewHolder(final BindingViewHolder holder, int position) {
holder.getBinding().setVariable(BR.mess, data.get(holder.getAdapterPosition()));
}
@Override
public BindingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case TYPE_ITEM: {
return new MessageItemViewHolder(DataBindingUtil.inflate(inflater, R.layout.rv_item_message_item, parent, false).getRoot());
}
case TYPE_HEADER: {
return new MessageHeaderViewHolder(DataBindingUtil.inflate(inflater, R.layout.rv_item_message_header, parent, false).getRoot());
}
default:
throw new IllegalStateException("Inaccepteble view type");
}
}
是的,实际上有两种视图类型。