-2

I am facing a problem and also seen this this link but no help.

Items are {a.b,c,d,e,f,g} but showing {a,b,c,d,a,b,c,d}.

@Override
public View getView(int i, View view, ViewGroup parent) {
    final ImageHolder imageHolder = new ImageHolder();
    ViewHolder viewHolder = new ViewHolder();

    if (view == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(android.app.Service.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.feeds_list_facebook, null);
        //viewHolder = new ViewHolder();
        viewHolder.message = (TextView) view.findViewById(R.id.message);
        viewHolder.imageView = (ImageView) view.findViewById(R.id.image);
        Event event = events.get(i);
        Log.i("SIZE",events.size() + "");
        Log.i("MESSAGE", event.getMessage());
        Log.i("IMAGE__URL", event.getPicture());
        viewHolder.message.setText("");
        viewHolder.imageView.setImageBitmap(null);

        viewHolder.message.setText(event.getMessage());

        mImageLoader.DisplayImage(event.getPicture(), viewHolder.imageView);
        view.setTag(viewHolder);

    }
    viewHolder = (ViewHolder) view.getTag();

    return view;
}

and my viewHolder

class ViewHolder {
    TextView message;
    ImageView imageView;
}
Community
  • 1
  • 1
thestrongenough
  • 225
  • 2
  • 14
  • 2
    yet another ... you are not setting values if view is reused ... https://www.youtube.com/watch?v=wDBM6wVEO70 – Selvin Jan 13 '16 at 13:40

1 Answers1

1

Move these lines before the line return view;

    viewHolder.message = (TextView) view.findViewById(R.id.message);
    viewHolder.imageView = (ImageView) view.findViewById(R.id.image);
    Event event = events.get(i);
    Log.i("SIZE",events.size() + "");
    Log.i("MESSAGE", event.getMessage());
    Log.i("IMAGE__URL", event.getPicture());
    viewHolder.message.setText("");
    viewHolder.imageView.setImageBitmap(null);
    viewHolder.message.setText(event.getMessage());

You are reusing the view, which is good, because now you only inflate the view when there is no reusable one, so basically when populating the list in the beginning.

But you are also only setting the custom data on the list items when you are inflating, which is not good. You always set the custom data, either if it is a reusable view or a new one.

Daniel Zolnai
  • 16,487
  • 7
  • 59
  • 71