我正在尝试使用 ExpendableListView 实现布局。有 4 个组元素,每个组有 2 个孩子。第一个组元素确实有 0 个子元素。
G
G
C
C
G
C
C
G
C
C
每个 Group Element 有 2 个 TextViews、1 个 ImageView 和 1 个 Switch。每个子元素都有 2 个 TextView 和 1 个 SeekBar。
适配器包含 2 个支架。一个用于 Groupviews,一个用于 Childviews。
在组层上,一切都按预期工作。
但是在子层上,不同的 ChildView 是相互依赖的。例如设置 Group Element3/Child Element1 的 SeekBar 也会设置 Group Element1/Child Element0 的 SeekBar。
我确实理解这个问题与缺少视图的唯一性和 Android 的视图处理(优化)有关。
这是 getChildView 方法:
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final int tempgroupPos = groupPosition;
final int tempchildPos = childPosition;
ChildViewHolder cviewHolder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.interfaces_listrow_details_intervall, null);
cviewHolder = new ChildViewHolder();
cviewHolder.tvb = (TextView) convertView.findViewById(R.id.interfaces_child_intervall_textbig);
cviewHolder.tvs = (TextView) convertView.findViewById(R.id.interfaces_child_intervall_textexplanation);
cviewHolder.sb = (SeekBar) convertView.findViewById(R.id.interfacesSeekBar);
cviewHolder.sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int getPosition = (Integer) seekBar.getTag();
clist.get(tempgroupPos).get(tempchildPos).setProgress(seekBar.getProgress());
// do stuff
notifyDataSetChanged();
}
});
convertView.setTag(cviewHolder);
convertView.setTag(R.id.interfaces_child_intervall_textbig, cviewHolder.tvb);
convertView.setTag(R.id.interfaces_child_intervall_textexplanation, cviewHolder.tvs);
convertView.setTag(R.id.interfacesSeekBar, cviewHolder.sb);
} else {
cviewHolder = (ChildViewHolder) convertView.getTag();
}
cviewHolder.sb.setTag(groupPosition);
cviewHolder.sb.setProgress(clist.get(groupPosition).get(childPosition).getProgress());
cviewHolder.tvb.setText(clist.get(groupPosition).get(childPosition).getBigText());
cviewHolder.tvs.setText(clist.get(groupPosition).get(childPosition).getSmallTextActivated());
return convertView;
}
如果您需要代码的任何其他部分或其他信息,请询问。
我查看了这些问题/答案,但它们并没有真正帮助我个人。