3

リストビュー用のカスタム アダプターがあります。

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



    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new DataHolder();
        holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
        holder.locationName = (TextView)row.findViewById(R.id.locationName);
        holder.locationElevation = (TextView)row.findViewById(R.id.lcoationElevation);
        holder.locationDistance = (TextView)row.findViewById(R.id.locationDistance);
        row.setTag(holder);
    }
    else
    {
        holder = (DataHolder)row.getTag();
    }

    Data data = gather[position];
    holder.locationName.setText(data.locationName);
    holder.locationElevation.setText(data.locationElevation);
    holder.locationDistance.setText(Double.toString(data.heading));
    holder.imgIcon.setImageBitmap(data.icon);



    return row;
}

私のリストビューにはアイテムが取り込まれています。最初のアイテムの背景色を赤にしたいだけです。スクロールすると、他のすべてのアイテムは独自の色のままですが、最初のアイテムはまだ赤です。何か案は?何かを試すたびに、スクロールすると赤い背景が他の行に移動します。

4

1 に答える 1

10

何かを試すたびに、スクロールすると赤い背景が他の行に移動します。

あなたにはelse句がなかったと思います。リソースを節約するために、アダプタは各行レイアウトを再利用します。したがって、レイアウトの値を変更すると、次にこの特定のレイアウトがリサイクルされるときに引き継がれます。else ステートメントを追加するだけで、リサイクルされたビューをデフォルトの状態に戻すことができます。

if(position == 0)
    row.setBackgroundColor(Color.RED);
else
    row.setBackgroundColor(0x00000000); // Transparent

(背景が透明ではなく特定の色である場合は、その値を変更する必要があります。)

于 2012-12-08T20:56:36.923 に答える