当我展开和折叠可展开列表视图中的组时,其上的文本视图会在所有其他组之间更改其文本
这是我的代码:
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder vh = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.expandable_list_group_row, parent, false);
vh = new GroupViewHolder();
vh.textView = (TextView) convertView.findViewById(R.id.groupHeader);
convertView.setTag(R.string.tag_group);
} else {
vh = (GroupViewHolder) convertView.getTag(R.string.tag_group);
}
if(vh!=null) {
vh.textView.setText(groupHeaders[groupPosition]);
}
return convertView;
}
里面的孩子是正确的,但小组似乎改变了位置(只有文本视图,而不是他们的位置)
我该如何解决它?它只发生在安卓2.3.6上
您需要处理您的 else 情况,因为视图回收会导致旧标头显示不正确。
我遇到了同样的问题,这是一个工作版本:
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
ViewHolderGroupItem viewHolder;
String groupTitle = Integer.toString((int)getGroup(groupPosition));
if (convertView == null)
{
viewHolder = new ViewHolderGroupItem();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.my_group_header, null);
viewHolder.txtTitle = (TextView) convertView.findViewById(R.id.my_group_year);
// cache layout reference
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolderGroupItem) convertView.getTag();
}
viewHolder.txtTitle.setText(groupTitle);
return convertView;
}
您的问题是视图回收。您需要做的是从代码中删除if (convertView == null)
部分。仅使用convertView = inflater.inflate(R.layout.expandable_list_group_row, parent, false);
vh = new GroupViewHolder();
vh.textView = (TextView) convertView.findViewById(R.id.groupHeader);
convertView.setTag(R.string.tag_group);
,然后它将不再检查视图是否可回收,并且正确的视图将保持在正确的位置。