使用膨胀的expandablelistview中的复选框保存子行的状态

时间:2012-09-25 15:32:45

标签: android android-activity expandablelistview android-sqlite

我的Android项目中有一个工作的expandablelistview,其中每个子项包含一个ImageView,一个TextView,一个EditText和一个Checkbox:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#CCCCCC"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/imgname"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="True"
    android:contentDescription="@+id/imgdesc"
    android:paddingLeft="1dp"
    android:scaleType="fitCenter"
    android:src="@drawable/logo_grey" />

<TableLayout
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_toLeftOf="@+id/check1"
    android:layout_toRightOf="@+id/imgname"
    android:stretchColumns="0" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/desc"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:textSize="13dp"
            android:background="#CCCCCC"
            android:textColor="#777777"
            android:textStyle="bold" />
    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="fill_horizontal" >

        <EditText
            android:id="@+id/content"
            style="textViewStyle"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:fadingEdge="none"
            android:focusable="true"
            android:hint="@+id/contenthint"
            android:isScrollContainer="true"
            android:minWidth="150dp"
            android:singleLine="false"
            android:textSize="10dp"
            android:textStyle="italic" >
        </EditText>
    </TableRow>
</TableLayout>

<CheckBox
    android:id="@+id/check1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:focusable="false"
    android:gravity="right" />
 </RelativeLayout>

为了写入我的SQLite数据库,我想创建一个列表,对于复选框值为true的每个子项,它包含TextView desc中的文本和EditText内容中的文本,可能作为数组价值对。该操作将由用户通过ExpandableListActivity上的Button触发。但是我不确定在给视图膨胀之后如何识别小部件的值。我很欣赏有点抬头,我无法在网上找到一个好的答案!

1 个答案:

答案 0 :(得分:0)

我自己并不是一个专业人士,但我会尽我所能。首先,如果您有可能跟踪expandablelistview中的复选框状态,它会有所帮助。如果你还没有。这是我使用的,我改编自Android ExpandableListView with Checkbox, Controlling checked state

//  set checkbox states
ArrayList<ArrayList<Integer>> check_states = new ArrayList<ArrayList<Integer>>(children.length);
public void setChildrenAndValues() { 
    for(int i = 0; i < children.length; i++) {
        ArrayList<Integer> tmp = new ArrayList<Integer>(children[i].length);
        for(int j = 0; j < children[i].length; j++) {
            tmp.add(1);
        }
        check_states.add(tmp);
    }
}

然后在获取子视图中:

    childcb.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {
            if (childcb.isChecked()) {
                check_states.get(groupPosition).set(childPosition, 1);
            }else{ check_states.get(groupPosition).set(childPosition, 0);
            }
        }
    });

因此,为了保存数据库的内容,您可以尝试使用某个按钮的void onclick方法:

    if (check_states.get(groupPosition).get(childPosition) == 1) {
        desc_content4db.put(desc_tv.getText().toString(), content_et.getText().toString());
    }else{
        // placeholder code, w.e. you want
    }

以及其他地方:

HashMap<String,String> desc_content4db = new HashMap<String, String>();

我不知道desc_tv / content_et.getText()。toString()是否会像你想要的那样工作。什么可能而且看起来更笨拙的是你可能已经需要准备好所有内容的Hashmaps的ArrayList - 然后复制你想要放入数据库的所有东西,具体取决于它是否对应于曾经的复选框检查位置。它听起来不太好但可能有用。

更理想我会猜测你是否可以单步执行check_states列表并依赖于它是1或0,将edit_text和text_view复制到该id或位置。可悲的是,现在高于我的水平。如果你能做到这一点,那就更有力量了。