【发布时间】:2017-09-06 08:50:43
【问题描述】:
我有一个RecyclerView,我将在其中展示 9 张图片。所有这些图像都在服务器上。我正在使用Glide 下载适配器的onBindViewHolder 中的图像。问题是如果互联网速度比 Glide 慢,下载图像和显示需要时间。在它下载图像之前,我的 Recyclerview 是空的并且没有显示任何内容。我想显示Progressbar,直到所有图像都下载完毕。下载完所有图片后,Progressbar 将隐藏并显示所有 9 张图片。
这是我的适配器:
public class PuzzleGridAdapter extends RecyclerView.Adapter<PuzzleGridAdapter.MyViewHolder> implements ItemTouchHelperAdapter {
List<String> itemList;
LayoutInflater inflater;
Context context;
private final OnStartDragListener mDragStartListener;
public PuzzleGridAdapter(Context context, OnStartDragListener dragStartListener) {
this.context = context;
mDragStartListener = dragStartListener;
inflater = LayoutInflater.from(context);
itemList = new ArrayList<>();
}
public void getItemList(List<String> nameList) {
int currentSize = itemList.size();
itemList.clear();
itemList.addAll(nameList);
notifyItemRangeRemoved(0, currentSize);
notifyItemRangeInserted(0, nameList.size());
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.custom_puzzle_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
Log.e("PuzzleGridAdapter", itemList.get(position));
// holder.textView.setTag(itemList.get(position));
// new DownloadTask().execute(holder.textView);
Glide.with(context).load(itemList.get(position)).asBitmap().override(200,200).listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
Log.e("PuzzleGridAdapter", e.getMessage());
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
Log.e("PuzzleGridAdapter", "ready");
return false;
}
}).diskCacheStrategy(DiskCacheStrategy.RESULT).into(holder.textView);
//holder.textView.setImageResource(itemList.get(position));
// Start a drag whenever the handle view it touched
holder.cardView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
mDragStartListener.onStartDrag(holder);
}
return false;
}
});
}
@Override
public int getItemCount() {
Log.e("PuzzleGridAdapter", itemList.size() + "");
return itemList.size();
}
public List<String> getUpdateList() {
return itemList;
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
String item = itemList.remove(fromPosition);
itemList.add(toPosition, item);
notifyItemMoved(fromPosition, toPosition);
return true;
}
@Override
public void onItemDismiss(int position) {
itemList.remove(position);
notifyItemRemoved(position);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder {
CardView cardView;
ImageView textView;
public MyViewHolder(View itemView) {
super(itemView);
cardView = (CardView) itemView.findViewById(R.id.gameCard);
textView = (ImageView) itemView.findViewById(R.id.kolamImage);
}
@Override
public void onItemSelected() {
itemView.setBackgroundColor(Color.LTGRAY);
}
@Override
public void onItemClear() {
itemView.setBackgroundColor(Color.WHITE);
}
}
}
在下载所有内容之前如何显示Progressbar?
【问题讨论】:
-
而不是显示进度条。在每个图像上使用一个占位符,直到它被 Glide 加载。 Glide 提供了一种在加载图像之前使用占位符的方法,它还支持 GIF。它将使应用程序更具响应性,用户可以在加载之前播放,也可以按 tha anroid.R.id.home 按钮返回
-
试试这个stackoverflow.com/a/35306315/5026709我希望它有帮助......
-
对不起@RonnySulistio 我已经看到了。但我的问题是
RecyclerView。这里我有多个ImageViews。
标签: android android-recyclerview android-glide