Reputation: 153
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
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
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
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
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