为什么Checkbox小部件不会出现在RecyclerView的CardView上?

时间:2016-04-15 04:03:40

标签: android android-recyclerview android-checkbox

我有一个由CardViews填充的RecyclerView列表。我试图在CardView的左侧添加一个Checkbox,但没有任何反应。仅显示两个TextView。我在这里缺少什么?

card_layout.xml:

...
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/singlecard_view1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    card_view:cardBackgroundColor="@android:color/white"
    card_view:cardCornerRadius="6dp"
    android:orientation="horizontal"
    android:layout_margin="4dp">

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?android:selectableItemBackground"  >

    <CheckBox
        android:id="@+id/chkSelected"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_centerVertical="true"  />

    <TextView
        android:id="@+id/cardBlankText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_toRightOf="@+id/chkSelected"
        android:layout_toEndOf="@+id/chkSelected"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:clickable="true"
        android:gravity="center_vertical"
        android:textAlignment="center" />

    <TextView
        android:id="@+id/cardBlankText3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_toRightOf="@+id/cardBlankText2"
        android:layout_toEndOf="@+id/cardBlankText2"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:clickable="true"
        android:gravity="center_vertical"
        android:textAlignment="center"  />

    </RelativeLayout>

</android.support.v7.widget.CardView>
...

DataModel.java:

public class DataModel {

private String todo;
private String note1;
private boolean isSelected;

public String getTodo() {
    return todo;
}

public void setTodo(String todo) {
    this.todo = todo;
}

public String getNote1() {
    return note1;
}

public void setNote1(String note1) {
    this.note1 = note1;
}


public boolean isSelected() {
    return isSelected;
}

public void setSelected(boolean isSelected) {
    this.isSelected = isSelected;
}
}

Adapter.java:

...
public class ListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    CheckBox chkSelected;
    TextView cardBlankText2;
    TextView cardBlankText3;

    public ListViewHolder(View itemView) {
        super(itemView);

        chkSelected = (CheckBox) itemView.findViewById(R.id.chkSelected);
        cardBlankText2 = (TextView)itemView.findViewById(R.id.cardBlankText2);
        cardBlankText3 = (TextView)itemView.findViewById(R.id.cardBlankText3);

@Override
public void onBindViewHolder(ListViewHolder holder, int position) {

        holder.chkSelected.setChecked(dbList.get(position).isSelected());
        holder.chkSelected.setTag(dbList.get(position));
        holder.cardBlankText2.setText(dbList.get(position).getTodo());
        holder.cardBlankText3.setText(dbList.get(position).getNote1());
     }
...
}

enter image description here

1 个答案:

答案 0 :(得分:0)

可能是第三个textview的匹配父宽度

的问题
<TextView
    android:id="@+id/cardBlankText3"
    android:layout_width="match_parent"

这是一个常见的错误&#34; match_parent&#34;不能填补剩余的空间,但却占据了整个视野。 (并且,是的,在预览中,它完全没有问题)

如果您想让第三个textview填满复选框和第二个textview之后的剩余空间。你可以试试

<TextView
    android:id="@+id/cardBlankText3"
    android:layout_width="0dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"

为避免textview 2太长而且没有为textview 3留出空间,你也应该设置一个最大宽度。这样的事情。

<TextView
    android:id="@+id/cardBlankText2"
    android:maxWidth="160dp"

只需要一个你喜欢的神奇数字。

如果你想让textview 2和textview 3均匀地划分空间。您可以使用LinearLayout,weight_sum和weight。