可扩展ListView显示组位置的错误标题

时间:2013-10-28 14:55:26

标签: android expandablelistview

当我展开并折叠可扩展列表视图中的组时,其上的textview会在所有其他组之间更改其文本

这是我的代码:

@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;
}

里面的孩子是正确的,但这些团体似乎改变了地方(只有文字观点,而不是他们的位置)

我该如何解决? PS。它只发生在android 2.3.6

3 个答案:

答案 0 :(得分:0)

您需要处理其他情况,因为查看回收导致旧标头显示不正确。

答案 1 :(得分:0)

我遇到了同样的问题,这是一个有效的版本:

@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;
}

答案 2 :(得分:0)

您的问题是视图回收。您需要做的是从代码中删除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);,它将不会检查视图是否可以回收,并且正确的视图将保留在正确的位置。