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 に答える