wrong item changes in recyclerview

Viewed 3436

Hi everyone I'm stuck in this and need help :

Each item has a CheckBox and I set setOnLongClickListener for root element of my items in RecyclerView like this :

    holder.faviorateVideoItemRelative.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View arg0) {


            if (chk_visible)
            {
                return  true ;
            }
            holder.chk_faviorateVideo.setChecked(!holder.chk_faviorateVideo.isChecked());
            chk_visible = true ;
            checkedItemsCNT = 1 ;
            deleteListVideoCourses.add(data.get(holder.getAdapterPosition())) ;
            notifyDataSetChanged() ;
            return  true ;
        }
    });

If I scroll down , when I make a long click on one of items , the CheckBox of wrong item get checked !

6 Answers

Solution 1:

You can override two method getItemId, getItemViewType.

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

    @Override
    public int getItemViewType(int position) {
        return position;
    }

Like this:

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


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

    @Override
    public int getItemViewType(int position) {
        return position;
    }
}

Solution 2: Set setIsRecyclable false.

EasyAdapter easyAdapter=new EasyAdapter();
easyAdapter.setIsRecyclable(false);

After using the above mentioned solutions,

The following solutions worked like a charm for me.

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

@Override
public int getItemViewType(int position) {
    return position;
}

using holder.setIsRecyclable(false) removes the desired selection as well when you come back to it after the whole scrolling process.

Related