【问题标题】:RecyclerView duplicating items some timeRecyclerView 有时会重复项目
【发布时间】:2016-11-18 12:33:00
【问题描述】:

大家好,我正在使用 recyclerview 来显示我的图像,但他们同时重复了我在谷歌上搜索这个问题的值

我的代码是

ShareDialog shareDialog;
String PATH;
String link , img_txt;
private ImageLoader imageLoader;
private Context context;
String url1;
CallbackManager callbackManager;
File file1;
List<ImgModel> listmodel;
    public ImageAdapter(List<ImgModel> listmodel, Context context) {
    super();
    this.listmodel = listmodel;
    this.context = context;
    setHasStableIds(true);  //added  15/7/2016
}
   @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
        .inflate(R.layout.img_row, parent, false);
     ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {

    ImgModel model = listmodel.get(position);
    imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
    imageLoader.get(model.getImageUrl(), ImageLoader.getImageListener(holder.imageView, R.drawable.placeholder, android.R.drawable.ic_dialog_alert));
    holder.imageView.setImageUrl(model.getImageUrl(), imageLoader);
    holder.textViewName.setText(model.getName());
    holder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        link = listmodel.get(position).getImageUrl();
        img_txt = listmodel.get(position).getName();
        String fileExtension = link.substring(link.lastIndexOf("/"));
        Log.e("0_0","===>"+fileExtension);
        String dir = Environment.getExternalStorageDirectory() + "/Download/myapp/";
         file1 = new File(dir+fileExtension);
        Log.d("file is ","longclick"+file1);
        if (file1.exists()) {
            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.setType("image/jpg");
            shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(String.valueOf(file1))));
            shareIntent.putExtra(Intent.EXTRA_TEXT, img_txt);
            context.startActivity(Intent.createChooser(shareIntent, "Share image with"));
        } else {
            new DownloadFile().execute(link);
        }
        return true;
    }
    });
    holder.imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    url1 = listmodel.get(position).getImageUrl();
    Log.e("Hey Amit", "second is url" + url1);
    Imagefull();
    }
    });
    }
@Override
public int getItemCount() {
     return listmodel.size();
     }

public long getItemId(int position) {
    return position;
}

 class ViewHolder extends RecyclerView.ViewHolder {
  public NetworkImageView imageView;
  public TextView textViewName;

  public ViewHolder(View itemView) {
    super(itemView);
    imageView = (NetworkImageView) itemView.findViewById(R.id.imageView_img);
    textViewName = (TextView) itemView.findViewById(R.id.textview_img);
    callbackManager = CallbackManager.Factory.create();
    }
}

image is here

【问题讨论】:

  • 我认为当图像未使用其网址加载时,它会显示重复的图像。
  • 不重复一些时间,但那个时候网址也会加载我调试我的代码

标签: android android-recyclerview


【解决方案1】:

将布局中的高度((R.layout.img_row) 更改为 wrap_content 而不是 match_content

【讨论】:

  • 它延伸了我的价值观
【解决方案2】:

我怀疑您可能听说过 setHasStableIds(true) 加快了您的回收站查看速度,但请尝试将其删除或设置为 false。

所以试试这个:

setHasStableIds(false);

然后让我知道会发生什么;

我遇到了这个问题,有时项目重复,有时根本不显示,在删除该方法调用后,它解决了我的问题!

祝你好运,编码愉快!

【讨论】:

  • 感谢您的回复,但是当它返回时,它有时会给出重复值,但当它为假时,它每次都会给出原因
  • 完全删除该方法,看看会发生什么;告诉我
【解决方案3】:

将上面的行替换为以下内容:

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {

    @Override
public ImageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
    .inflate(R.layout.img_row, parent, false);
 ImageAdapter.ViewHolder viewHolder = new ImageAdapter.ViewHolder(v);
return viewHolder;
}

@Override
public void onBindViewHolder(final ImageAdapter.ViewHolder holder, final int position) {

ImgModel model = listmodel.get(holder.getAdapterPosition()
    );
...........
..............
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多