0

我制作了一个自定义类别列表。某些类别具有嵌套类别。

当列表最多包含 9 行(可见区域可以包含 9 行而不滚动)时,代码运行良好,但是当我添加第 10 行(此处列表变为可滚动)并向下滚动列表时,行外观会改变。

包含嵌套列表的行会发生这种情况(它们具有“移动下一个图像”)。当我向下滚动并向上滚动时,具有“移动下一个图像”的行会消失。

我使用的自定义适配器是:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        View rowView = convertView;

        if (rowView == null)
        {
          LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          rowView = inflater.inflate(R.layout.m_category_list_activity, null);

          ViewHolder viewHolder = new ViewHolder();

          viewHolder.text = (TextView) rowView.findViewById(R.id.label);
          viewHolder.image = (ImageView) rowView.findViewById(R.id.icon);

          rowView.setTag(viewHolder);
        }

        ViewHolder holder = (ViewHolder) rowView.getTag();

        holder.text.setText(values.get(position));

        String s = status.get(position);

        if (s.equals("s")) 
        {
            holder.image.setVisibility(IGNORE_ITEM_VIEW_TYPE);
        } 

        return rowView;
     }

我不明白问题是什么。我什至在使用convertView。

4

2 回答 2

0
    if (s.equals("s")) 
    {
        holder.image.setVisibility(IGNORE_ITEM_VIEW_TYPE);
    } 

我认为您缺少“else”子句(重置为默认值),这就是回收失败的原因。请记住,当您回收视图时,您将获得与最后一个项目完全相同的视图,因此您需要再次设置您关心的所有视图属性。

于 2012-12-19T18:12:43.390 回答
0

将您的 getView() 方法更改为此,它将为您工作

@Override

 public View getView(int position, View convertView, ViewGroup parent) 
  {
    View rowView = convertView;

    if (rowView == null)
    {
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      rowView = inflater.inflate(R.layout.m_category_list_activity, null);

      ViewHolder viewHolder = new ViewHolder();

      viewHolder.text = (TextView) rowView.findViewById(R.id.label);
      viewHolder.image = (ImageView) rowView.findViewById(R.id.icon);

      rowView.setTag(viewHolder);
    } else {
       rowView.getTag(viewHolder);
    }

    ViewHolder holder = (ViewHolder) rowView.getTag();

    holder.text.setText(values.get(position));

    String s = status.get(position);

    if (s.equals("s")) 
    {
        holder.image.setVisibility(IGNORE_ITEM_VIEW_TYPE);
    } 

    return rowView;
 }
于 2013-07-05T11:24:14.677 回答