1

データの視覚的な側面を変更するために、Android 用のカスタム ListView アダプターを作成しました。ListView を読み込むと、目的のアイテムの外観が変更されます。ビューをスクロールすると、最終的にリスト内のすべてのアイテムの外観が変更されるまで、他のアイテムがランダムに変更されます。

このタイプのコードについてSOで読んだことから、Androidは古いビューを再利用するため、positionフィールドが
public View getView(int position, View convertView, ViewGroup parent)
必ずしもデータ構造にマップされないことがわかります。これは、私が苦労している動作のようです。

Vincent が示唆するように、ViewHolder パターンを使用して getView メソッドを更新しました。

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View rowView = convertView;
    if (rowView == null)
    {
        LayoutInflater inflater = LayoutInflater.from(context);
        rowView = inflater.inflate(R.layout.rowlayout, null);
        ViewHolder viewHolder = new ViewHolder();
        viewHolder.text = (TextView) rowView.findViewById(R.id.tv01);
        rowView.setTag(viewHolder);
    }

    ViewHolder holder = (ViewHolder) rowView.getTag();
    String s = names[position];
    holder.text.setText(s);
    if (s.startsWith("a"))
    {
        holder.text.setTextColor(0xff00ffff);
    }

    return rowView;
}

変更する必要がある項目は静的なので、実行時に変更するよりも良い方法があれば、それもうまくいきます! どんな助けでも大歓迎です、ありがとう。

4

2 に答える 2

0

レイアウトはAndroidで再利用されているため、この出力が得られます。必要なのは、各ビューの静的ビューホルダーとして機能するクラスを用意し、それをタグとして使用することです。参照用にこれを参照してください。

于 2012-04-26T04:27:09.350 に答える