检查列表视图中的多个项目

时间:2014-06-02 10:43:32

标签: android android-layout

我使用适配器从内容提供商加载列表视图。列表中的每个项目都使用以下布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id ="@+id/wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <CheckedTextView
            android:id="@+id/txt_chat"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
            android:checkMark="?android:attr/listChoiceIndicatorMultiple"
            />

        </LinearLayout>
</LinearLayout>

我已将列表项设置为允许多项选择模式:

onCreate(){
    ...
    lv_chatMessages = (ListView) findViewById(R.id.listview_chat);
    lv_chatMessages.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lv_chatMessages.setItemsCanFocus(false);
    ...
}

但是在运行时,我无法检查列表视图中的任何项目。如果我触摸该框,则该项目会立即突出显示,但不会出现复选标记。

如果我向CheckedTextView添加属性,我可以为所有项目设置默认值:

android:checked="true"

如何让用户在运行时更改每个项目的检查状态?

3 个答案:

答案 0 :(得分:1)

参考此链接......

CheckedTextView

这可能对你有帮助..

[由Faizal编辑]: 使用onItemClickListener中的toggle()可以解决问题:

lv_chatMessages.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3){

            CheckedTextView ctv = (CheckedTextView) (((ViewGroup) arg1).findViewById(R.id.txt_chat));
            ctv.toggle();
        }
        });

答案 1 :(得分:1)

可以将其添加到列表项

 android:descendantFocusability="blocksDescendants"
 android:focusableInTouchMode="false"

答案 2 :(得分:1)

由于您使用的是自定义适配器,因此您必须在自定义适配器的getView()方法中维护复选框的状态。

您可能要做的是在Boolean对象中添加另一个ArrayList字段,用于填充适配器并在getView()方法中检查该值。到某样的东西:

if(status) {
    checkBox.setChecked(true);
}

另外,使用status更新OnCheckedChangeListener()变量。

此方法将允许您切换状态,并确保即使列表项超出视图,也会保持复选框状态。

编辑1:不使用自定义适配器时。这就是我做到的。

ListView rendererList;
ArrayList<String> friendlyNames;

friendlyNames = new ArrayList<String>();
rendererList = (ListView) dialog.findViewById(R.id.rendererList);

ArrayAdapter rendererSelectionAdapter = new ArrayAdapter<String>(activity,R.layout.custom_list_layout, friendlyNames);

rendererList.setAdapter(rendererSelectionAdapter);
rendererList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

custom_list_layout与android提供的布局相同,但是,我必须稍作修改,因此我复制了默认文件并进行了编辑。

这是custom_list_layout:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:background="@color/white"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
android:gravity="center_vertical"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:textSize="@dimen/dialog_box_button_textsize" />