无法在getView中检查/取消选中CheckedTextView

Isl*_*san 16 android android-layout android-spinner android-checkbox

我正在自定义ListView中加载手机通讯录.每行都是一个可检查的LinearLayout,包含CheckedTextView和另一个TextView.

我正在使用自定义ArrayAdapter提供列表视图.我的问题是我无法在getView()中控制CheckedTextViews.例如,当我尝试以下内容时

public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        if(row == null){            
            row = inflater.inflate(layout, parent, false);
        }

        CheckedTextView checkedTextView =  (CheckedTextView) row.findViewById(R.id.checkedTextView);
        checkedTextView.setText("A");
        checkedTextView.setChecked(true);
        return row;
    }
Run Code Online (Sandbox Code Playgroud)

每当我滚动列表视图时,应该检查每个文本视图,但这不会发生.谁能告诉我怎么做?

编辑:在getView()中检查它是很重要的,我不能在setListAdapter()之后检查所有内容

EDIT2:这是显示每行视图的xml文件

<?xml version="1.0" encoding="utf-8"?>
<com.example.multiplecontacts.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <CheckedTextView
        android:id="@+id/checkedTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:paddingBottom="0dp"
        android:text="CheckedTextView"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/subTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:paddingTop="0dp"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</com.example.multiplecontacts.CheckableLinearLayout>
Run Code Online (Sandbox Code Playgroud)

CheckableLinearLayout是一个自定义布局,它扩展了LinearLayout并实现了Checkable,如前所述.我从这里拿走了它

Ale*_*lov 30

您是否在布局xml中为CheckedTextView设置了checkMark属性?

例如: android:checkMark="?android:attr/listChoiceIndicatorMultiple

CheckedTextView不仅仅是一个带文本的复选框.你还必须注意,CheckedTextView不是可聚焦的,或者没有一些操作就可以点击(因为它是为ListView设计的,因此它的状态必须由ListView控制setOnItemClickListener)

setChoiceMode应该为ListView设置.检查适配器的getView中的行应该通过以下方式完成:listView.setItemChecked(position, value)

  • 您可以使用`((ListView)parent).setItemChecked(position,true);`来自适配器而不是传递引用. (8认同)
  • 可能CheckViewTextView由ListView控制,你为ListView设置了多个ChoiceMode吗? (2认同)
  • 如果你可以从适配器访问ListView的实例,你可以(也可能应该)使用listView.setItemChecked(position,value) (2认同)