上下滚动列表后从 NetworkImageView 丢失图像
Losing images from NetworkImageView after Scrolling list up-down
我有一个 ListView,它使用 Volley Json 抓取带有与之关联的图像的新闻。 起初它会加载所有内容,但是当我滚动列表并返回时,它有时会显示图像,有时不会。滚动 2-3 次后 listview
失去每一个图像。与我的 测试应用程序 (仅使用 Actionbar 选项卡)相同的程序完美,所以我不知道怎么了。提前感谢您的宝贵时间。
注意: 我使用来自开发者网站的 MySingleton
和 LruBitmapCache
。我的应用程序的 GUI 类似于 Play Store,即带选项卡的导航抽屉。我搜索了这样的问题,但没有找到直接的答案。对不起,如果在这里问这个问题很愚蠢。
如果 我使用 ViewHolder 那么问题就解决了,但是如果 URL 不存在,我将无法以编程方式删除 NetworkImageView。
我不想为没有图像的行添加占位符图像
这是我的行布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/cat_thumbnail"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentLeft="true"
android:layout_marginRight="8dp"
/>
<TextView
android:id="@+id/cat_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_alignTop="@id/cat_thumbnail"
android:layout_toRightOf="@id/cat_thumbnail"
/>
<TextView
android:id="@+id/cat_paper"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cat_title"
android:layout_marginTop="1dip"
android:layout_toRightOf="@+id/cat_thumbnail"
android:textSize="15dip" />
适配器class
private Activity activity;
private LayoutInflater inflater;
private List<NewsArticles> newsArticlesItems;
ImageLoader imageLoader;
public NewsAdapter(Activity activity, List<NewsArticles> newsArticlesItems)
{
this.activity = activity;
this.newsArticlesItems = newsArticlesItems;
}
@Override
public int getCount() {
return newsArticlesItems.size();
}
@Override
public Object getItem(int location) {
return newsArticlesItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int postion, View convertView, ViewGroup viewGroup) {
if(inflater == null)
{
inflater = (LayoutInflater) activity.getSystemService(activity.LAYOUT_INFLATER_SERVICE);
}
if(convertView == null)
{
convertView = inflater.inflate(R.layout.cat_list_items, null);
}
if (imageLoader == null)
imageLoader = MySingleton.getInstance(activity).getImageLoader();
//Article image
NetworkImageView thumbnail = (NetworkImageView) convertView.findViewById(R.id.cat_thumbnail);
//Article title
TextView title = (TextView) convertView.findViewById(R.id.cat_title);
//Newspaper Name
TextView newspaperName = (TextView) convertView.findViewById(R.id.cat_paper);
//
if(!URLUtil.isValidUrl(newsArticlesItems.get(postion).getThumbnailUrl()))
{
thumbnail.setVisibility(View.GONE);
}
/*if(newsArticlesItems.get(postion).getThumbnailUrl()=="")
{
thumbnail.setVisibility(View.GONE);
}*/
else
{
thumbnail.setImageUrl(newsArticlesItems.get(postion).getThumbnailUrl(), imageLoader);
}
title.setText(newsArticlesItems.get(postion).getTitle());
newspaperName.setText(newsArticlesItems.get(postion).getNewspaperName());
return convertView;
}
在 else 块中这样尝试
else
{
thumbnail.setVisibility(View.VISIBLE);//add this
thumbnail.setImageUrl(newsArticlesItems.get(postion).getThumbnailUrl(), imageLoader);
}
我有一个 ListView,它使用 Volley Json 抓取带有与之关联的图像的新闻。 起初它会加载所有内容,但是当我滚动列表并返回时,它有时会显示图像,有时不会。滚动 2-3 次后 listview
失去每一个图像。与我的 测试应用程序 (仅使用 Actionbar 选项卡)相同的程序完美,所以我不知道怎么了。提前感谢您的宝贵时间。
注意: 我使用来自开发者网站的 MySingleton
和 LruBitmapCache
。我的应用程序的 GUI 类似于 Play Store,即带选项卡的导航抽屉。我搜索了这样的问题,但没有找到直接的答案。对不起,如果在这里问这个问题很愚蠢。
如果 我使用 ViewHolder 那么问题就解决了,但是如果 URL 不存在,我将无法以编程方式删除 NetworkImageView。 我不想为没有图像的行添加占位符图像
这是我的行布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/cat_thumbnail"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentLeft="true"
android:layout_marginRight="8dp"
/>
<TextView
android:id="@+id/cat_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_alignTop="@id/cat_thumbnail"
android:layout_toRightOf="@id/cat_thumbnail"
/>
<TextView
android:id="@+id/cat_paper"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cat_title"
android:layout_marginTop="1dip"
android:layout_toRightOf="@+id/cat_thumbnail"
android:textSize="15dip" />
适配器class
private Activity activity;
private LayoutInflater inflater;
private List<NewsArticles> newsArticlesItems;
ImageLoader imageLoader;
public NewsAdapter(Activity activity, List<NewsArticles> newsArticlesItems)
{
this.activity = activity;
this.newsArticlesItems = newsArticlesItems;
}
@Override
public int getCount() {
return newsArticlesItems.size();
}
@Override
public Object getItem(int location) {
return newsArticlesItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int postion, View convertView, ViewGroup viewGroup) {
if(inflater == null)
{
inflater = (LayoutInflater) activity.getSystemService(activity.LAYOUT_INFLATER_SERVICE);
}
if(convertView == null)
{
convertView = inflater.inflate(R.layout.cat_list_items, null);
}
if (imageLoader == null)
imageLoader = MySingleton.getInstance(activity).getImageLoader();
//Article image
NetworkImageView thumbnail = (NetworkImageView) convertView.findViewById(R.id.cat_thumbnail);
//Article title
TextView title = (TextView) convertView.findViewById(R.id.cat_title);
//Newspaper Name
TextView newspaperName = (TextView) convertView.findViewById(R.id.cat_paper);
//
if(!URLUtil.isValidUrl(newsArticlesItems.get(postion).getThumbnailUrl()))
{
thumbnail.setVisibility(View.GONE);
}
/*if(newsArticlesItems.get(postion).getThumbnailUrl()=="")
{
thumbnail.setVisibility(View.GONE);
}*/
else
{
thumbnail.setImageUrl(newsArticlesItems.get(postion).getThumbnailUrl(), imageLoader);
}
title.setText(newsArticlesItems.get(postion).getTitle());
newspaperName.setText(newsArticlesItems.get(postion).getNewspaperName());
return convertView;
}
在 else 块中这样尝试
else
{
thumbnail.setVisibility(View.VISIBLE);//add this
thumbnail.setImageUrl(newsArticlesItems.get(postion).getThumbnailUrl(), imageLoader);
}