Reputation: 55
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
Reputation: 343
Make a holder for efficiency. what is news_photo? in .into of picasso imageview from your layout should be passed.
Upvotes: 1
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