user6593653
user6593653

Reputation:

RecyclerView duplicating items some time

hey guys i m using recyclerview for displaying my images but their same time duplicate the vaule i am searching this problem on google i found this and this and this or more but no one is helping

my code is

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

Upvotes: 0

Views: 1398

Answers (3)

Dhruvi
Dhruvi

Reputation: 1981

Replace your above lines with below:

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()
    );
...........
..............
}

}

Upvotes: 0

user5439728
user5439728

Reputation:

Change height in your layout((R.layout.img_row) as wrap_content instead of match_content

Upvotes: 3

Eenvincible
Eenvincible

Reputation: 5626

I suspect you might have heard that setHasStableIds(true) speeds up your recyclerviews but try either removing it or setting to false.

so simply try this:

setHasStableIds(false);

Then let me know what happens;

I had this issue and sometimes items were duplicated and sometimes never showed up at all and after removing that method call, it fixed my issues!

Good luck and happy coding!

Upvotes: 1

Related Questions