jayaduvanshi
jayaduvanshi

Reputation: 153

How to select selected value multivalue in recyclerview

i want to get selected ids in activity which is selected in recyclerview adapter

holder.images.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (holder.checked.getVisibility() == View.VISIBLE) {

                holder.checked.setVisibility(View.GONE);



            } else if (holder.checked.getVisibility() == View.GONE) {


                holder.checked.setVisibility(View.VISIBLE);

            }
        }
    });

Upvotes: 0

Views: 170

Answers (4)

jayaduvanshi
jayaduvanshi

Reputation: 153

Here that solution i created arrylist and put data size

public static ArrayList<Integer> dataSize=new ArrayList<>();

and pass to adapter

  holder.checked.setVisibility(idpositions.get(position)==0?View.GONE:View.VISIBLE);

    holder.images.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (dataSize.size()>0) {

                if (holder.checked.getVisibility() == View.VISIBLE) {

                    holder.checked.setVisibility(View.GONE);

                    dataSize.set(position,0);

                } else if (holder.checked.getVisibility() == View.GONE) {

                    dataSize.add(position,data.getId());

                    holder.checked.setVisibility(View.VISIBLE);

                }

            }
        }
    });

and on button click simply get that arraylist and get your selected value

  if(dataSize.size()>0){

        for (int i = 0; i < dataSize.size(); i++) {

            if (dataSize.get(i)==0){
                continue;
            }else {
                ids= ids+String.valueOf(dataSize.get(i))+",";
            }

        }

        Toast.makeText(this, ids, Toast.LENGTH_SHORT).show();

    }

Upvotes: 1

Rajasekaran M
Rajasekaran M

Reputation: 2538

Use list to handle your selected items or positions

declare list for store selected items

private List<Integer> selectedPositions=new ArrayList();

update code in onBindViewHolder like below

holder.checked.setVisibility(selectedPositions.contains(position)?View.VISIBLE:View.GONE);
holder.images.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (selectedPositions.contains(position)) {
                    holder.checked.setVisibility(View.GONE);
                      selectedPositions.removeAt(selectedPositions.indexOf(position));
                    } else  {
                    holder.checked.setVisibility(View.VISIBLE);
                    selectedPositions.add(position);

            }
        }
    });

Upvotes: 1

JDevoloper
JDevoloper

Reputation: 237

Create an interface class like this;

public interface ItemSelectedListener{
    void onItemSelected(int selectedposition);
}

In your adapter initialize your interface;

    private List<ItemSelectedListener> mItemSelectedSubscribers = new ArrayList<ItemSelectedListener>();

Add this method in your adapter ;

public void subscribeItemSelection(ItemSelectedListenerlistener) {
        mItemSelectedSubscribers .add(listener);
    }

Set this loop in your click events;

for (ItemSelectedListener listener : mMediaSelectedSubscribers) {
    listener.onItemSelected(position);
                }

In your activity, implement your interface and you will set a implemented methods. this methods look like this;

int selectedPosition;
    @Override
        public void onMediaSelected(int position) {
            selectedPosition = position;
        }

When you do this you can use your selected position where you want in your activity

Hope this help!

Upvotes: 0

Shrikant
Shrikant

Reputation: 589

Now, you need to declare a list to hold those selected ids

private List<DATA_TYPE> selectedIds = new ArrayList();

What you can do is declare one isSelected boolean in your model. In onBindViewHolder method, set visibility as

if (YOUR_POJO.isSelected()) {
   holder.checked.setVisibility(View.VISIBLE);
} else {
   holder.checked.setVisibility(View.GONE);
}

When you click on image check if it was already selected based on that you can add/remove its id

holder.images.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(YOUR_POJO.isSelected()){
             YOUR_POJO.setSelected(false);
             if (selectedIds.contains(YOUR_POJO.getId()){
                selectedIds.remove(YOUR_POJO.getId());
             }
        } else {
             YOUR_POJO.setSelected(true);
             selectedIds.add(YOUR_POJO.getId());
        }
        notifyItemChanged(holder.getAdapterPosition(), YOUR_POJO);
    }
});

Hope this helps.

Upvotes: 0

Related Questions