0

我有一个列表视图,其中每个列表项包含一个ImageView。现在在我的适配器类中,我在ImageView上设置了一个单击侦听器,它更改了图像资源。我使用简单的代码,它的工作原理,但我有一个独特的问题,如果我点击任何图像它的变化,但也随后的第六名单项目的形象改变。这是我面临的一个非常独特的问题,我不明白是什么导致它。在我的适配器类试图更改列表中的图像源

我点击收听:

public class CustomListAdapter extends BaseAdapter { 
private Activity activity; 
private LayoutInflater inflater; 
private List<Movie> movieItems; 
ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

public CustomListAdapter(Activity activity, List<Movie> movieItems) { 
    this.activity = activity; 
    this.movieItems = movieItems; 
} 

@Override 
public int getCount() { 
    return movieItems.size(); 
} 

@Override 
public Object getItem(int location) { 
    return movieItems.get(location); 
} 

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

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

    if (inflater == null) 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.list_item, null); 

    if (imageLoader == null) 
     imageLoader = AppController.getInstance().getImageLoader(); 
    NetworkImageView thumbNail = (NetworkImageView) convertView 
      .findViewById(R.id.thumbnail); 
    final ImageView favIcon = (ImageView) convertView.findViewById(R.id.favIcon); 
    TextView title = (TextView) convertView.findViewById(R.id.title); 
    TextView rating = (TextView) convertView.findViewById(R.id.rating); 
    TextView location = (TextView) convertView.findViewById(R.id.location); 

    // getting movie data for the row 
    Movie m = movieItems.get(position); 

    // thumbnail image 
    thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader); 

    // title 
    title.setText(m.getTitle()); 

    // rating 
    rating.setText("Rating: " + String.valueOf(m.getRating())); 

    // location 
    location.setText("Location:" + String.valueOf(m.getLocation())); 

    favIcon.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((ImageView)v).setImageResource(R.drawable.batdroid); 
     } 
    }); 


    return convertView; 
} 

} 
+0

您可以张贴其余的适配器的代码吗? – Lazai

+0

当然,让我编辑 –

+0

好的,所以当你点击你改变所选行的图像,但也是最后一行的图像更改?或只是第六? – Lazai

回答

0

我guessin'这是一个循环视图的问题。您应该使用查看持有人模式,查看this以获得更广泛的视图。

反正你应该尝试这样的事:

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

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.your_layout, null); 

     holder = new ViewHolder(); 
     holder.img= (ImageView) convertView.findViewById(R.id.img); 

     convertView.setTag(holder); 
    } else { 
     holder = convertView.getTag(); 
    } 



// set for each image in yourlist 
     holder.img.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ((ImageView) v).setImageResource(R.drawable.batdroid); 
      } 
     }); 


    return convertView; 
} 

private static class ViewHolder { 
    public ImageView img; 
} 
+0

感谢您的帮助人,但我尝试过,但仍然没有修复。你是否认为它的模拟器问题cus我正在模拟器上工作? –

+0

我不这么认为,但你应该尝试在你的手机或任何手机上进行测试 – Lazai