我将ExpandableListActivity
与ExpandListAdapter
结合使用。
我的布局:
---------------------------------
| <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
中的一个可由用户编辑。当我点击底部的按钮时,我想得到每个孩子的可编辑项目值。
答案 0 :(得分:2)
我相信你可以通过类似的方式处理这个问题,以便如何将信息包含在常规ListView
的一个项目中。 ExpandableListView内置了一些方法,可让您找出点击的项目。一旦知道列表中的哪个项目被单击,您就可以从与该项目关联的各个视图中提取值。我会做以下事情:
(1)setOnGroupClickListener
代表ExpandableListView
。 onGroupClick
监听器获得了与列表中的位置一起选择的视图。
(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