2

ListView の最初のリスト項目の画像を設定しようとしていますが、他のリスト項目の一部の ImageViews も変更されています。

public class MyAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    public ArrayList<ListItem> myItems = new ArrayList<ListItem>();

    Player[] players;

    public MyAdapter() {
        DataBase banco = new DataBase(ScoreBoard.this);
        players = banco.consultaJogadores(); 
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        for (int i = 0; players[i] != null; i++) {
            ListItem listItem = new ListItem();
            listItem.caption = players[i].getName();
            myItems.add(listItem);
        }
        notifyDataSetChanged();
    }

    public int getCount() {
        return myItems.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.topplayer, null);      
            holder.textView = (TextView) convertView.findViewById(R.id.topPlayerTextView);
            holder.imageview = (ImageView) convertView.findViewById(R.id.topPlayerImageView);   
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }           
        holder.textView.setText(position + " " + players[position].getName() + " " + players[position].getScore());
        if (position == 0) {
            holder.imageview.setImageResource(R.drawable.ball);
        }
        return convertView;
    }
}

class ViewHolder {
    TextView textView;
    ImageView imageview;
}

class ListItem {
    String caption;
}

リストの最初のプレーヤーから画像を変更したい。インデックス 0、1、4、6、8、9、11、13、14 のプレーヤーが更新されますが、論理的な順序には従いません。スクロールすると、画像が再び変わります。

ありがとう

4

1 に答える 1

3

ビューをリサイクルしているため、listitems画像を設定したくない場合は、明示的に設定を解除する必要があります。

if (position == 0) {
    holder.imageview.setImageResource(R.drawable.ball);
} else {
    holder.imageview.setImageDrawable(null);
}

(それ以外の場合は、そのビュー(つまり、convertView)が最後に使用されたときに設定された画像を記憶するだけです!

于 2012-09-19T19:50:41.017 に答える