我对使用 ExpandableListView 有疑问。在我的情况下,我有两个组和两个子视图,而子视图由一个包含多个按钮、文本视图等的 RelativeLayout 组成。例如,当首先扩展第二组并对视图持有者进行一些更改并随后扩展第一组时,先前所做的更改也会自动应用于第一组的子视图,为什么会发生这种情况?
我在调用视图时记录:
// 创建了带有 ExpandableListView 的 Fragment,第 0 组和第 1 组的 convertViews 为 空
convertView == null,GroupView,groupPosition 0
convertView == null,GroupView,groupPosition 1
// 先展开第二组,child的convertView为null
getChildView:组位置 1,子位置 0 convertView == null,ChildView
// 展开后的第一组,child 的 convertView 不再为空
getChildView:组位置 0,子位置 0 convertView != null,ChildView
好像是在取第二组孩子的convertView,是不是Tag不认识女巫的看法呢?
编辑:
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (LOG)
Log.d(TAG, "getChildView: group position " + groupPosition + ", child position " + childPosition);
final ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item_channel, null);
if (LOG) Log.d(TAG, "convertView == null, ChildView");
// add all the viewholders (...)
viewHolder.connect = (ToggleButton) convertView.findViewById(R.id.connect_tog);
viewHolder.channelOnOff = (Switch) convertView.findViewById(R.id.channel_switch);
convertView.setTag(viewHolder);
} else {
if (LOG) Log.d(TAG, "convertView != null, ChildView");
viewHolder = (ViewHolder) convertView.getTag();
}
return convertView;
}
不,我不是在外部通过适配器更改视图,ViewHolder 类也是静态类。
非常感谢和欢呼,pingu