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

问题描述:

我有一个由CardViews填充的RecyclerView列表。我试图在CardView的左侧添加一个复选框,但没有任何反应。只有两个TextView出现。我在这里错过了什么?为什么复选框小部件不会出现在RecyclerView的CardView上?

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

+0

它不显示复选框? – dungtv

+0

正确,但不显示复选框。 – AJW

+0

它不显示在设计屏幕上或运行? 我尝试,它有复选框。 我复制你的代码 设计屏幕:http://i.imgur.com/bwxV9wW.png 和运行:http://i.imgur.com/Ni09PYB.png – dungtv

大概第三吨的问题extview比赛母公司宽度

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

这是一个常见的错误是“match_parent”不能只是填补空间的其余部分,但占据整个视图。 (并且,是的,在预览中,这完全没有问题)

如果你想让第三个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。

+0

@JT好吧,我会尝试。回来一分钟。 – AJW

+0

@JT没有运气,复选框从不显示。我尝试了cardBlankText2的match_parent和wrap_content。我设置了maxWidth = 40dp。 – AJW

+0

你使用什么样的支持库版本? – OnJohn