Reputation: 1854
I have a ListView
that contains images and text downloaded from server.
The text appears fine and doesn't repeat but the images do. I have template layout to display images which i inflate according to the number of images received. However after my 3rd list entry (row) the images start to repeat themselves.
Here is my getView()
method in my ArrayAdapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(resourceId, parent, false);
}
TextView feedHeading = (TextView) convertView.findViewById(R.id.tv_feedheading);
TextView feedSubheading = (TextView) convertView.findViewById(R.id.tv_feedsubheading);
LinearLayout imagesLayout = (LinearLayout) convertView.findViewById(R.id.ll_images);
View view;
Feeds feed = mfeeds.get(position);
ImageLoader.getInstance().clearDiskCache();
ImageLoader.getInstance().clearMemoryCache();
feedHeading.setText(feed.title);
feedSubheading.setText(feed.subtitle);
ImageView image1;
ImageView image2 = null;
ImageView image3 = null;
ImageView image4 = null;
ImageView image5 = null;
List<ImageView> imageViewList = new ArrayList<>();
if (feed.imageIds.length == 0){
view = inflater.inflate(R.layout.template_oneimage2, imagesLayout, false);
imageViewList.clear();
image1 = (ImageView) view.findViewById(R.id.iv_t_1);
imageViewList.add(image1);
}
else if (feed.imageIds.length == 1){
view = inflater.inflate(R.layout.template_oneimage2, imagesLayout, false);
imageViewList.clear();
image1 = (ImageView) view.findViewById(R.id.iv_t_1);
imageViewList.add(image1);
}
else if (feed.imageIds.length == 2){
view = inflater.inflate(R.layout.template_twoimage, imagesLayout, false);
imageViewList.clear();
image1 = (ImageView) view.findViewById(R.id.iv_t_1);
image2 = (ImageView) view.findViewById(R.id.iv_t_2);
imageViewList.add(image1);
imageViewList.add(image2);
}
else if (feed.imageIds.length == 3){
view = inflater.inflate(R.layout.template_threeimage1, imagesLayout, false);
imageViewList.clear();
image1 = (ImageView) view.findViewById(R.id.iv_t_1);
image2 = (ImageView) view.findViewById(R.id.iv_t_2);
image3 = (ImageView) view.findViewById(R.id.iv_t_3);
imageViewList.add(image1);
imageViewList.add(image2);
imageViewList.add(image3);
}
else if (feed.imageIds.length == 4){
view = inflater.inflate(R.layout.template_fourimage1, imagesLayout, false);
imageViewList.clear();
image1 = (ImageView) view.findViewById(R.id.iv_t_1);
image2 = (ImageView) view.findViewById(R.id.iv_t_2);
image3 = (ImageView) view.findViewById(R.id.iv_t_3);
image4 = (ImageView) view.findViewById(R.id.iv_t_4);
imageViewList.add(image1);
imageViewList.add(image2);
imageViewList.add(image3);
imageViewList.add(image4);
}
else {
view = inflater.inflate(R.layout.template_fiveimage, imagesLayout, false);
imageViewList.clear();
image1 = (ImageView) view.findViewById(R.id.iv_t_1);
image2 = (ImageView) view.findViewById(R.id.iv_t_2);
image3 = (ImageView) view.findViewById(R.id.iv_t_3);
image4 = (ImageView) view.findViewById(R.id.iv_t_4);
image5 = (ImageView) view.findViewById(R.id.iv_t_5);
imageViewList.add(image1);
imageViewList.add(image2);
imageViewList.add(image3);
imageViewList.add(image4);
imageViewList.add(image5);
}
imagesLayout.addView(view);
for (int i=0; i<feed.imageIds.length; i++){
//load image using imageloader
//use specific imageid in imagepath
String format = feed.imageFormat.replace("{image_id}",String.valueOf(feed.imageIds[i]));
ImageLoader.getInstance().displayImage(format,imageViewList.get(i), Utility.displayImageOptions);
}
return convertView;
}
Upvotes: 0
Views: 51
Reputation: 2070
Not sure about this, but I think the problem comes from this line :
imagesLayout.addView(view);
As the view are recycled, every time you "create" a view, you add y list of imagesviews to the layout.
You should not clear your cache every time you create a View by the way.
ImageLoader.getInstance().clearDiskCache();
ImageLoader.getInstance().clearMemoryCache();
Upvotes: 1