我使用适配器从内容提供商加载列表视图。列表中的每个项目都使用以下布局。
<?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"
如何让用户在运行时更改每个项目的检查状态?
答案 0 :(得分:1)
参考此链接......
这可能对你有帮助..
[由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" />