做的一个表情的APP,用Recyclerview,Glide(4.0版本)加载网络图片到ImageView,发现只加载前面5张,滑动到下面后,其他的图片才显示出来,求解,想修复,但不知问题在哪?

解决方案 »

  1.   

    glide加载模式是不是设置成原图加载了,glide为了友好性,不会oom只会加载失败,你可以看看日志应该有输出图片太大、即将oom等相关信息
      

  2.   

    发一个动图链接来看看,如果不是图片太大的问题,又没有有用的日志的话,就是代码逻辑问题了,需要发adapter相关的代码
      

  3.   

    https://b7.cn/d/file/20190928/4f239502094d8ffb5b296f1a56d96e3c.jpg
    这是其中一张没及时加载出来的图片
      

  4.   

    package aystudio.nopi.adapter;import android.content.Context;
    import android.content.Intent;
    import android.support.v7.widget.CardView;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import com.bumptech.glide.Glide;
    import java.util.List;
    import aystudio.nopi.bean.Source;
    import aystudio.nopi.bqb.DetailActivity;
    import aystudio.nopi.bqb.R;public class SourceAdapter extends RecyclerView.Adapter<SourceAdapter.ViewHolder> {    private final static String TAG = "SourceAdapter";
        Context mContext;
        List<Source> sourceList;    public SourceAdapter(List<Source> sourceList) {
            this.sourceList = sourceList;
        }    @Override
        public ViewHolder onCreateViewHolder(final ViewGroup viewGroup, final int i) {
            if (mContext == null) {
                mContext = viewGroup.getContext();
            }
            View view = LayoutInflater.from(mContext).inflate(R.layout.layout_cardview,viewGroup,false);
            ViewHolder viewHolder = new ViewHolder(view);
            viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i(TAG, "onClick: "+ v.getTag());
                    Intent intent = new Intent(mContext,DetailActivity.class);
                    intent.putExtra("current_url",sourceList.get((Integer) v.getTag()).getUrl());
                    mContext.startActivity(intent);
                }
            });
            return viewHolder;
        }    @Override
        public void onBindViewHolder(ViewHolder viewHolder, int i) {
            viewHolder.itemView.setTag(i);
            Source source = sourceList.get(i);
            ViewGroup.LayoutParams layoutParams = viewHolder.imageView.getLayoutParams();
            layoutParams.width = viewHolder.cardView.getWidth();
            viewHolder.imageView.setLayoutParams(layoutParams);
           /* RequestOptions options = new RequestOptions()
                    .skipMemoryCache(false)  //用内存缓存
                    .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存所有图片(原图,转换图)
                    .fitCenter()   //fitCenter 缩放图片充满ImageView CenterInside大缩小原(图) CenterCrop大裁小扩充满ImageView  Center大裁(中间)小原
                    .error(R.drawable.error);
            //Glide为4.0版本以上 配置参数*/
            Glide.with(mContext)
                    .load(source.getUrl())
                    .thumbnail(Glide.with(viewHolder.imageView).load(R.drawable.glide))
                    .into(viewHolder.imageView);
        }    @Override
        public int getItemCount() {
            return sourceList.size();
        }    static class ViewHolder extends RecyclerView.ViewHolder {        CardView cardView;
            ImageView imageView;        public ViewHolder(View itemView) {
                super(itemView);
                cardView = (CardView) itemView;
                imageView = itemView.findViewById(R.id.iv_photo_show);
            }
        }
    }
      

  5.   

    已贴adapter,看看哪里有问题
      

  6.   

    没看出啥问题,你把缩略图的这行.thumbnail删掉试试
      

  7.   

    也不行,还是一样,不知道为什么,加载本地图片就没有这种问题你打印一下source.getUrl()看看是不是数据问题,顺便发个链接我看看多大,还有上面的setLayoutParams干嘛的?imageview直接match就行了
      

  8.   

    gif,png,jpg
    大小不一,表情包图片,一般都不是很大,就300KB左右
    个数大概30左右
    主要问题,就是加载前5个,后面的要滑动才显示,目前还没找到怎么回事
      

  9.   

    png jpg gif