带有复选框的Android ListView

时间:2011-08-14 22:23:08

标签: android android-listview

我现在花了一整天的时间来尝试加载自定义行。在StackOverflow和其他地方似乎有很多关于如何将复选框绑定到Android列表视图中的一行数据的示例,但它们似乎都不完整。

这是我的(row.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="40dip"
    android:orientation="horizontal" android:background="@drawable/row_bk"
    android:layout_gravity="center_vertical">

    <TextView android:id="@+id/ItemID"
    android:layout_weight="0" android:visibility="gone"
        android:layout_width="0dp" android:gravity="center"
    android:layout_height="wrap_content" />

<TextView android:id="@+id/Title"
    android:layout_width="0dp" android:textColor="#666"
    android:layout_weight="1" android:layout_height="40dip"
    android:padding="5dp" android:gravity="center_vertical"
    android:textSize="17dip" />

<CheckBox android:id="@+id/chkCheck" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:focusable="false" android:focusableInTouchMode="false" android:clickable="true"></CheckBox>

</LinearLayout>

在代码中,我有一个SimpleCursorAdapter,填充ListView。

    Cursor oLoop = db
            .rawQuery(
            "select _id, title, is_checked from tbl",null);

    startManagingCursor(oLoop);

    String[] from = new String[] { "_id", "title", "is_checked" };

    int[] to = new int[] { R.id.ItemID, R.id.Title, R.id.chkCheck };

    SimpleCursorAdapter  oList =
     new SimpleCursorAdapter (this, R.layout.task_item_row, oLoop, from,
     to);  

     setListAdapter(oList);

过去这个,我不确定该怎么做。如果有人可以给我一个很好的例子,那就太好了。目标是实际上能够切换复选框。

提前致谢! 亚历

1 个答案:

答案 0 :(得分:1)

亚历,

下一步是实施ViewBinder.setViewValue()

它看起来像这样:

getViewAdapter().setViewBinder(
    new ViewBinder(){
        public boolean setViewAdapter(View view, Cursor cursor, int columnIndex){
            <JavaType> object = cursor.get<JavaType>(columnIndex);

            boolean isHandled = false;
            if(view.getId() == R.id.checkBox){
                CheckBox cb = (CheckBox) view;
                cb.setChecked(isObjectChecked(object));
                // object depends on your underlying data type 
                // in the data base, use the debugger to find the actually implemented type.
                isHandled = true;
            }

            return isHandled;
        }
    }
);

这可以是一种非常强大的方法,具有条件可见的视图,并从网络中加载Uri等。