我有一个可扩展的列表视图。我使用自定义适配器加载我自己的.xml布局。每个组都有一个 Switch 。我不知道会显示多少组。现在我想知道如何动态地为每个开关添加一个监听器,以便对变化作出反应。
ExpandableListView活动:
public class ExpandableListView extends Activity {
private MyCustomAdapter adapter;
private ExpandableListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail_layout);
initViews();
}
private void initViews() {
listView = (ExpandableListView) findViewById(R.id.foo);
adapter = new MyCustomAdapter(this, data); // my custom adapter
listView.setAdapter(adapter);
//...
}
//...
}
MyCustomAdapter
public class MyCustomAdapter extends BaseExpandableListAdapter {
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null); // load layout with switch
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.myTextView;
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle);
return convertView;
}
// ...
}
list_group.xml
<?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="wrap_content"
android:padding="8dp"
android:background="#000000">
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:paddingLeft="20dp"
android:paddingRight="0dp"
android:paddingEnd="0dp"
android:paddingStart="20dp"
android:textSize="17sp" />
<Switch
android:id="@+id/mySwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:focusable="false"
android:checked="true"
/>
</RelativeLayout>
如何为每个“mySwitch”添加一个监听器?这可能在 ExpandableListView ?
中谢谢!
答案 0 :(得分:0)
在扩充组布局时添加侦听器。您可以通过设置与该组位置对应的标记来区分单击哪个组的开关。
以下是一个例子:
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
...
// Add a switch listener
Switch mySwitch = (Switch) convertView.findViewById(R.id.mySwitch);
mySwitch.setTag(groupPosition);
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.e("TAG", "Clicked position: " + buttonView.getTag());
}
});
} else {
convertView.findViewById(R.id.mySwitch).setTag(groupPosition);
}
...
return convertView;
}
请注意,每次调用getGroupView
时都需要设置标记。
作为旁注:您应该使用持有人模式,这样您就不必在findViewById
中拨打getGroupView
(费用很高)。
答案 1 :(得分:0)
首先,您应该使用ViewHolder模式。 如果您夸大布局,为什么不向Switch添加OnCheckedChangeListener?您可能应该将开关设置为无法对焦,以便仍然可以单击列表项。