RecyclerView.ViewHolder和DataBinding中的LinearLayout宽度

时间:2017-02-13 13:43:53

标签: android android-layout data-binding android-databinding

我碰巧遇到了一个小问题。在我的项目中,我使用DataBindingRecyclerView将数据绑定到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 &amp;&amp; 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(..),所以没什么特别的。

我附上了两张带有结果的图片。拳头 - 第一个绑定。第二个 - 滚动上下之后。

First Second

更新。绑定代码

    @Override
    public void onBindViewHolder(final BindingViewHolder holder, int position) {
        holder.getBinding().setVariable(BR.mess, data.get(holder.getAdapterPosition()));
    }

更新2. onCreateViewHolder()代码

 @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");
    }
}

是的,实际上有两种视图类型。

0 个答案:

没有答案