android - 使用 Glide 和 RecyclerView 上下滚动时图像消失,图像之间的空间增加

标签 android android-recyclerview imageview firebase-storage android-glide

我有一个 RecyclerView 来显示我的图像,我使用 Glide 从我的 Firebase 存储数据库中的 URL 加载图像。

问题是,当我上下滚动时,图像会重新加载,有时会消失,并且每个图像之间的空间会增加。我怎样才能阻止它?

我的 RecyclerViewAdapter

@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_layout,parent,false);
    myViewHolder myViewHolder = new myViewHolder(row);
    return myViewHolder;
}

@Override
public void onBindViewHolder(final myViewHolder holder, int position) {
    final int x = position;
    imageClass = myClassImageList.get(position);
        Glide.with(context)
                .load(imageClass.getName().trim())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .fitCenter()
                .into(holder.imageView);
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new MyAsyncTask().execute(myClassImageList.get(x).getName());

            }
        });
}

以及我如何将我的列表发送到适配器

      for(int i=0;i<imageNames.size();i++) {
        StorageReference ref = storageReference.child("filee/" + imageNames.get(i));
        ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                String imageURL = uri.toString();
                ImageClass imageClass = new ImageClass();
                imageClass.setName(imageURL);
                list.add(imageClass);
                recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

                Toast.makeText(MainActivity.this, "Downloaded", Toast.LENGTH_SHORT).show();

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                Toast.makeText(MainActivity.this, "Not Downloaded", Toast.LENGTH_SHORT).show();
            }
        });

    }
    adapter = new ImageRecyclerAdapter(MainActivity.this,list);
    recyclerView.setAdapter(adapter);

编辑:我通过删除 imageLayout 中的 LinearLayout 解决了图像之间的空间问题。

现在我的问题是当我上下滚动时图像会重新加载。

最佳答案

我认为问题在于您将项目添加到列表中的方式。

试着改成

adapter = new ImageRecyclerAdapter(MainActivity.this,list);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

for(int i=0;i<imageNames.size();i++) {
    StorageReference ref = storageReference.child("filee/" + imageNames.get(i));
    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            String imageURL = uri.toString();
            ImageClass imageClass = new ImageClass();
            imageClass.setName(imageURL);
            list.add(imageClass);
            adapter.notifyDataSetChanged();
            Toast.makeText(MainActivity.this, "Downloaded", Toast.LENGTH_SHORT).show();
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            Toast.makeText(MainActivity.this, "Not Downloaded", Toast.LENGTH_SHORT).show();
        }
    });

}

getDownloadUrl() 是否按调用顺序返回结果?如果不是,那么很可能图像在列表中以随机顺序加载。

关于android - 使用 Glide 和 RecyclerView 上下滚动时图像消失,图像之间的空间增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51581231/

相关文章:

java - Android - 如何在游戏中正确适配位图?

android - 如何在android中使用C2DM实现推送通知?

android - RecyclerView 不会立即显示任何内容

java - 如何为新项目添加 RecyclerView 幻灯片动画

android - 在装有Android 5.x.x的每台三星设备上错误放大类ImageView

android - 工具栏默认样式和导航图标

android - 禁用 android CoordinatorLayout 滚动行为

android - BaseAdapter 和 ContextMenu

Android- ImageView 不显示

Android:将按钮添加到首选项屏幕