ListView GetView()方法位置的奇怪行为

时间:2011-10-07 15:57:33

标签: android listview custom-adapter

我有一个自定义适配器用于我的ListView,我向它发送一个List,如果位置在列表中,那么imageview(在自定义行中)将其src更改为另一个..这是GetView方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.start_row, null); // line
                                                                    // 47
        holder = new ViewHolder();

        holder.tv_SuraName = (TextView) convertView.findViewById(R.id.Start_Name);

        holder.tv_SuraName.setTypeface(Font);
        holder.tv_PageNumber = (TextView) convertView.findViewById(R.id.Start_Numbering);
        holder.im_Audio = (ImageView) convertView.findViewById(R.id.Start_ImageView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.tv_SuraName.setText(SuraList_SuraNamesCode[position]);
    holder.tv_PageNumber.setText(Integer.toString(PageNumber[position]));
    holder.im_Audio.setOnClickListener(new imageViewClickListener(position));
    if (TilawaAvailable.contains(position))
        holder.im_Audio.setImageResource(R.drawable.quran_list_audioavailable);
    return convertView;
}

我发送一个有1个位置的列表。如果我慢慢滚动ListView,这个效果很好,只有1个图像视图应该更改。但是如果我快速滚动,那么接近正确位置的其他图像视图也会发生变化! 谁能告诉我为什么?

1 个答案:

答案 0 :(得分:2)

如果列表中未包含position,则不会将imageResource设置为其他内容。当具有自定义图像的视图离开屏幕时,它可能会被放置在列表中较低的位置并被重用。

尝试更改此内容:

if (TilawaAvailable.contains(position))
        holder.im_Audio.setImageResource(R.drawable.quran_list_audioavailable);

对此:

if (TilawaAvailable.contains(position))
        holder.im_Audio.setImageResource(R.drawable.quran_list_audioavailable);
else
        holder.im_audio.setImageResource(r.drawable.SOME_THING_ELSE);