我的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触发。但是我不确定在给视图膨胀之后如何识别小部件的值。我很欣赏有点抬头,我无法在网上找到一个好的答案!
答案 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或位置。可悲的是,现在高于我的水平。如果你能做到这一点,那就更有力量了。