我试图在 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/