ExpandableListView每行包含2个项目,获取子值

时间:2013-03-28 11:08:25

标签: android expandablelistview children expandablelistadapter

我将ExpandableListActivityExpandListAdapter结合使用。

我的布局:

---------------------------------
|  <TextView>                   |
|                               |
|-------------------------------|
| <ExpandableList>            | |
|  group1                     | |
|   child1: textView editText | |
|   child2: textView switch   | |
|  group2                     | |
|   child1: textView textView | |
|-------------------------------| 
| <footerView>                  |
|  [button]                     |
---------------------------------   

这是我的child_layout(删除了不必要的部分):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tvChild"
        android:layout_width="400px"
        android:layout_height="wrap_content"
        android:focusable="false" />

    <EditText
        android:id="@+id/etChild"
        android:layout_width="400px"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <TextView
        android:id="@+id/tvChild2"
        android:layout_width="600px"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <Switch
        android:id="@+id/switchChild"
        android:layout_width="400px"
        android:layout_height="wrap_content"
        android:textOff="NO"
        android:textOn="YES"
        android:visibility="gone" />
</LinearLayout>

这是我为每个孩子添加按钮,开关或textView的方法:

    Switch swc = (Switch) view.findViewById(R.id.switchChild);
    EditText etc = (EditText) view.findViewById(R.id.etChild);
    TextView tvc = (TextView) view.findViewById(R.id.tvChild2);

    if (groupPosition == 0) {
        swc.setVisibility(View.GONE);
        tvc.setVisibility(View.GONE);
        etc.setVisibility(View.GONE);
        if (childPosition == 0) 
            etc.setVisibility(View.VISIBLE);
        if (childPosition == 1) 
            etc.setVisibility(View.VISIBLE);
        if (childPosition == 2) {
            tvc.setVisibility(View.VISIBLE);
            tvc.setText(GlobalVariables.currentSelectedCar);
        }
    }

因此,每个孩子的TextView都不会更改,加上EditText/TextView/Switch中的一个可由用户编辑。当我点击底部的按钮时,我想得到每个孩子的可编辑项目值。

2 个答案:

答案 0 :(得分:2)

我相信你可以通过类似的方式处理这个问题,以便如何将信息包含在常规ListView的一个项目中。 ExpandableListView内置了一些方法,可让您找出点击的项目。一旦知道列表中的哪个项目被单击,您就可以从与该项目关联的各个视图中提取值。我会做以下事情:

(1)setOnGroupClickListener代表ExpandableListViewonGroupClick监听器获得了与列表中的位置一起选择的视图。

(2)一旦知道列表中的哪个项目被选中,您就应该能够以两种方式之一提取数据。如果您要查找的数据是固定的,请使用位置指示器从支持列表的适配器中检索该数据。如果您正在该选定项目中查找视图(听起来像是这样),请在返回的视图上使用findViewById。例如 - 因为onGroupClick方法提供View v作为参数

String input = v.findViewById(R.id.etChild).getText().toString();

findViewById提供的视图上调用onGroupClick可以让您在该视图中查看您提供的ID的子视图。这样,您可以从每个列表项中的输入字段中提取数据。

答案 1 :(得分:-1)

来自#Rarw的想法

TextView input = (TextView) v.findViewById(R.id.child_item_elv);
Toast.makeText(getActivity().getApplicationContext(), "child clicked : " + input.getText() , Toast.LENGTH_SHORT).show();

这个在OnGroupListener

内部有效