Mike
Mike

Reputation: 55

Android images in listview

I have a trouble with images in listview, so, let me introduce my problem : listview contain item, each item contain image, image is located in memory smartphone (for download image I use picasso), and when I view my listview and scroll it, I see that images in each item confused to each other... so, I don't know how to solve this problem. Can you help me please ?

Let me show my list adapter :

public class NewsAdapter extends BaseAdapter {

private List<News> newsList;
private LayoutInflater layoutInflater;
private Context context;

public NewsAdapter(Context context, List<News> newsList) {
    this.newsList = newsList;
    this.context = context;
    this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    if (view == null){
        view = layoutInflater.inflate(R.layout.item_layout_news, parent, false);
    }


    News news = getNews(position);


    if (news.picture != null) {
        File imagePath;
        imagePath = new File(context.getFilesDir()+ "/" + news.picture);
        Picasso.with(context) 
                .load(imagePath)
                .placeholder(R.drawable.loading)
                .error(R.drawable.no_name_)
                .into(news_photo);
    }else {
    } 
    return view;
}

@Override
public long getItemId(int position) {
    return newsList.get(position).getId();
}

@Override
public Object getItem(int position) {
    return newsList.get(position);
}

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

private News getNews(int position) {
    return (News)getItem(position);
}
}

Thank for your attention.

UPDATE

public class NewsAdapter extends BaseAdapter {

private List<News> newsList;
private LayoutInflater layoutInflater;
private Context context;

private static class FieldHolder {
    public ImageView image;
}
public NewsAdapter(Context context, List<News> newsList) {
    this.newsList = newsList;
    this.context = context;
    this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    FieldHolder fieldHolder = new FieldHolder();
    if (view == null){
        view = layoutInflater.inflate(R.layout.item_layout_news, parent, false);
                    final ImageView news_photo = (ImageView)view.findViewById(R.id.news_photo);
        fieldHolder.image = news_photo;
        view.setTag(fieldHolder);
    }else {
        fieldHolder =(FieldHolder) view.getTag();
    }
    News news = getNews(position);
        File imagePath;
        imagePath = new File(context.getFilesDir()+ "/" + news.picture);
        Picasso.with(context) //передаем контекст приложения
                .load(imagePath)
                .placeholder(R.drawable.loading)
                .error(R.drawable.no_name_)
                .into(fieldHolder.image);
    return view;
}

@Override
public long getItemId(int position) {
    return newsList.get(position).getId();
}

@Override
public Object getItem(int position) {
    return newsList.get(position);
}

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

private News getNews(int position) {
    return (News)getItem(position);
}
}

It seems it work without error, but I am not sure that I right use Picasso, could you give me advice about using Picasso with listview please ?

Upvotes: 0

Views: 152

Answers (2)

Sagar Pujari
Sagar Pujari

Reputation: 343

Make a holder for efficiency. what is news_photo? in .into of picasso imageview from your layout should be passed.

Upvotes: 1

Hira Aftab
Hira Aftab

Reputation: 11

You are missing some structure of getView is not correct it should.else part is missing Please check Correct getView structure

read this: http://www.survivingwithandroid.com/2013/02/android-listview-adapter-imageview.html

See the getView part of adapter

Upvotes: 1

Related Questions