Android Volley - 加载图像时在 ListView 适配器中显示进度条

标签 android android-listview android-volley

我试图在 ListView 项中使用 Volley 从网络获取图像。下载图片时,进度条显示,完成后应该隐藏。

这是我的适配器:

   public class NewsAdapter  extends CursorAdapter{
public NewsAdapter(Context context, Cursor c) {
    super(context, c, true);
}

@Override
public Cursor getItem(int position) {
    return (Cursor) super.getItem(position);
}

@Override
public void bindView(View view, final Context context, Cursor cursor) {
    final NetworkImageView imgNewsItem = (NetworkImageView) view.findViewById(R.id.imgNewsItem); 
    final ProgressBar progressNewsList = (ProgressBar) view.findViewById(R.id.progressNewsList);

    progressNewsList.setVisibility(View.VISIBLE);
    imgNewsItem.setVisibility(View.GONE);
    Ln.d("get news image: %s", cursor.getString(cursor.getColumnIndex(News.IMAGE_COLUMN)));
    ImageCacheManager.getInstance().getImageLoader().get(cursor.getString(cursor.getColumnIndex(News.IMAGE_COLUMN)), new ImageListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Ln.e(error);
            progressNewsList.setVisibility(View.GONE);
            imgNewsItem.setVisibility(View.VISIBLE);
            imgNewsItem.setImageResource(R.drawable.news_default_image);
        }

        @Override
        public void onResponse(ImageContainer response, boolean isImmediate) {
            progressNewsList.setVisibility(View.GONE);
            imgNewsItem.setVisibility(View.VISIBLE);
            imgNewsItem.setImageBitmap(response.getBitmap());
        }
    });
}

@Override
public View newView(Context arg0, Cursor arg1, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View retView = inflater.inflate(R.layout.row_view, parent, false);
    return retView;
}

我已经调试了,Volley下载和缓存图片位图是可以的,但是图片 View 不显示。

我的项目布局如下所示:

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp" >

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/imgNewsItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitXY"
        android:src="@drawable/news_default_image"
      android:visibility="gone" />

    <ProgressBar
        android:id="@+id/progressNewsList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" 
        >
    </ProgressBar>
</LinearLayout>

本例中的 ImageCacheManager:https://github.com/rdrobinson3/VolleyImageCacheExample 你能告诉我我哪里错了吗?提前致谢。

更新:另外,下载时不显示进度条。

最佳答案

您需要将 ImageListener.onResponse 方法更改为以下内容:

@Override
public void onResponse(ImageContainer response, boolean isImmediate) {
    Bitmap bitmap = response.getBitmap();
    if(bitmap != null){
       progressNewsList.setVisibility(View.GONE);
       imgNewsItem.setVisibility(View.VISIBLE);
       imgNewsItem.setImageBitmap(bitmap);
   }
}

以下是 ImageListener 的 java 文档:

Interface for the response handlers on image requests. The call flow is this: 1. Upon being attached to a request, onResponse(response, true) will be invoked to reflect any cached data that was already available. If the data was available, response.getBitmap() will be non-null. 2. After a network response returns, only one of the following cases will happen: - onResponse(response, false) will be called if the image was loaded. or - onErrorResponse will be called if there was an error loading the image

关于Android Volley - 加载图像时在 ListView 适配器中显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19448109/

相关文章:

android - searchview 不再关注方向变化

Android ListView 使用 ViewHolder

android - Android 谷歌地图问题的自定义 InfoWindow

android - 一个列表 Activity 中的两个自定义 ListView

android - 在 Activity 中访问 fragment ?

java - 使用 Volley 下载时出现错误 : Unexpected response code 200

android - 警报管理器中的字符串丢失

java - 如何在 Android 中填充 ListFragment?

android - com.mcxiaoke.volley:library-aar和com.mcxiaoke.volley:library有什么区别?

java - 使用 volley 库搜索特定的 json 字符串