I have onButton click in helper class which has update method which sets/updates the child recycler view for child items. Singlehash in this activity stores the selected pouch items. The problem here is whenever the update method is called even if I select any other items from the list it keeps updating all the selected parent items with same child recycler view list. I want to implement in a way that if I select child items for one item then it should assign to that item only. It should not refresh the parent list and assign same child items to all. How can I implement that? Modify my code accordingly.
public void onButtonClick(int bbClickPos) {
GetArticlesByTagId item = pouchesList.get(bbClickPos);
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context);
// Get the layout inflater
LayoutInflater inflater = this.getLayoutInflater();
// Inflate and set the layout for the dialog
View view = inflater.inflate(R.layout.custom_dialog_listview, null);
serviceListRecycler = view.findViewById(R.id.serviceListRecycler);
if (all_items.isEmpty() || all_items.size() == 0) {
Toast.makeText(getApplicationContext(), "List empty", Toast.LENGTH_SHORT).show();
adapter = new customPouchListAdapter(getApplicationContext(), all_items, selectedItems, getResources().getString(R.string.selectIns),
//adding data to recycler view
serviceListRecycler.setAdapter(adapter);
serviceListRecycler.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
Button btnConfirm = (Button) view.findViewById(R.id.btnConfirm);
TextView pouchListTitle = view.findViewById(R.id.hamMenuTitle);
customList = builder.create();
customList.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
pouchListTitle.setText(R.string.selectIns);
btnConfirm.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
private void update(int pos){
customTagsAdapter = new CustomTagsAdapter(context, singleHash, pouchesList, this, this::onButtonClick, viewPool);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
mRecyclerView.setAdapter(customTagsAdapter);
customTagsAdapter.notifyItemChanged(pos);
<code>@Override
public void onButtonClick(int bbClickPos) {
GetArticlesByTagId item = pouchesList.get(bbClickPos);
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context);
// Get the layout inflater
LayoutInflater inflater = this.getLayoutInflater();
// Inflate and set the layout for the dialog
View view = inflater.inflate(R.layout.custom_dialog_listview, null);
//recyclerview layout
serviceListRecycler = view.findViewById(R.id.serviceListRecycler);
builder.setView(view);
if (all_items.isEmpty() || all_items.size() == 0) {
Toast.makeText(getApplicationContext(), "List empty", Toast.LENGTH_SHORT).show();
} else {
adapter = new customPouchListAdapter(getApplicationContext(), all_items, selectedItems, getResources().getString(R.string.selectIns),
"na", "na", this);
//adding data to recycler view
serviceListRecycler.setAdapter(adapter);
serviceListRecycler.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
}
Button btnConfirm = (Button) view.findViewById(R.id.btnConfirm);
TextView pouchListTitle = view.findViewById(R.id.hamMenuTitle);
customList = builder.create();
customList.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
customList.show();
pouchListTitle.setText(R.string.selectIns);
btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update(bbClickPos);
customList.dismiss();
}
});
}
private void update(int pos){
customTagsAdapter = new CustomTagsAdapter(context, singleHash, pouchesList, this, this::onButtonClick, viewPool);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
mRecyclerView.setAdapter(customTagsAdapter);
customTagsAdapter.notifyItemChanged(pos);
}
</code>
@Override
public void onButtonClick(int bbClickPos) {
GetArticlesByTagId item = pouchesList.get(bbClickPos);
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context);
// Get the layout inflater
LayoutInflater inflater = this.getLayoutInflater();
// Inflate and set the layout for the dialog
View view = inflater.inflate(R.layout.custom_dialog_listview, null);
//recyclerview layout
serviceListRecycler = view.findViewById(R.id.serviceListRecycler);
builder.setView(view);
if (all_items.isEmpty() || all_items.size() == 0) {
Toast.makeText(getApplicationContext(), "List empty", Toast.LENGTH_SHORT).show();
} else {
adapter = new customPouchListAdapter(getApplicationContext(), all_items, selectedItems, getResources().getString(R.string.selectIns),
"na", "na", this);
//adding data to recycler view
serviceListRecycler.setAdapter(adapter);
serviceListRecycler.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
}
Button btnConfirm = (Button) view.findViewById(R.id.btnConfirm);
TextView pouchListTitle = view.findViewById(R.id.hamMenuTitle);
customList = builder.create();
customList.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
customList.show();
pouchListTitle.setText(R.string.selectIns);
btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update(bbClickPos);
customList.dismiss();
}
});
}
private void update(int pos){
customTagsAdapter = new CustomTagsAdapter(context, singleHash, pouchesList, this, this::onButtonClick, viewPool);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
mRecyclerView.setAdapter(customTagsAdapter);
customTagsAdapter.notifyItemChanged(pos);
}
This is my button click method.
Here’s my bind view holder for parent adapter.
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
GetArticlesByTagId item = this.dataList.get(position);
String splited = item.getType().toLowerCase().split(" ")[0];
// // holder.textView.setText(item.getType().toUpperCase());
holder.inc.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
holder.count.setText(String.valueOf(item.getCounter()));
holder.dec.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
holder.count.setText(String.valueOf(item.getCounter()));
// Set listener for checkbox clicks
holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (splited.equals("pouches") || splited.equals("pouch")) {
holder.itemCounter.setVisibility(View.GONE);
holder.bb.setVisibility(View.VISIBLE);
if (this.dataList.size() == 1){
buttonView.setEnabled(false);
holder.itemCounter.setVisibility(View.VISIBLE);
holder.bb.setVisibility(View.GONE);
holder.itemCounter.setVisibility(View.GONE);
holder.bb.setVisibility(View.GONE);
holder.childRecycler.setVisibility(View.GONE);
if (checkboxClickListener != null) {
int pp = holder.getAdapterPosition();
if (pp != RecyclerView.NO_POSITION) {
checkboxClickListener.onCheckboxClicked(pp, isChecked);
holder.checkBox.setChecked(item.isSelected());
holder.checkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
item.setSelected(((CheckBox) v).isChecked());
holder.bb.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int pp = holder.getAdapterPosition();
if (pp != RecyclerView.NO_POSITION) {
onPouchItemsButtonClickListner.onButtonClick(pp);
if (holder.childRecycler.getVisibility() == View.GONE){
holder.childRecycler.setVisibility(View.VISIBLE);
setPouchInstruments(holder.childRecycler, holder.getAdapterPosition(), pouchItems);
<code>@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
GetArticlesByTagId item = this.dataList.get(position);
String splited = item.getType().toLowerCase().split(" ")[0];
// // holder.textView.setText(item.getType().toUpperCase());
//item counter
holder.inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.incrementCounter();
holder.count.setText(String.valueOf(item.getCounter()));
}
});
holder.dec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.decrementCounter();
holder.count.setText(String.valueOf(item.getCounter()));
}
});
// Set listener for checkbox clicks
holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked){
if (splited.equals("pouches") || splited.equals("pouch")) {
holder.itemCounter.setVisibility(View.GONE);
holder.bb.setVisibility(View.VISIBLE);
if (this.dataList.size() == 1){
buttonView.setEnabled(false);
}
}else {
holder.itemCounter.setVisibility(View.VISIBLE);
holder.bb.setVisibility(View.GONE);
}
}else {
item.setClicked(false);
holder.itemCounter.setVisibility(View.GONE);
holder.bb.setVisibility(View.GONE);
holder.childRecycler.setVisibility(View.GONE);
}
if (checkboxClickListener != null) {
int pp = holder.getAdapterPosition();
if (pp != RecyclerView.NO_POSITION) {
checkboxClickListener.onCheckboxClicked(pp, isChecked);
}
}
});
holder.checkBox.setChecked(item.isSelected());
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.setSelected(((CheckBox) v).isChecked());
}
});
holder.bb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pp = holder.getAdapterPosition();
if (pp != RecyclerView.NO_POSITION) {
item.setClicked(true);
onPouchItemsButtonClickListner.onButtonClick(pp);
}
}
});
if (item.isClicked()){
if (holder.childRecycler.getVisibility() == View.GONE){
holder.childRecycler.setVisibility(View.VISIBLE);
//set pouch instruments
setPouchInstruments(holder.childRecycler, holder.getAdapterPosition(), pouchItems);
}
}
}
</code>
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
GetArticlesByTagId item = this.dataList.get(position);
String splited = item.getType().toLowerCase().split(" ")[0];
// // holder.textView.setText(item.getType().toUpperCase());
//item counter
holder.inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.incrementCounter();
holder.count.setText(String.valueOf(item.getCounter()));
}
});
holder.dec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.decrementCounter();
holder.count.setText(String.valueOf(item.getCounter()));
}
});
// Set listener for checkbox clicks
holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked){
if (splited.equals("pouches") || splited.equals("pouch")) {
holder.itemCounter.setVisibility(View.GONE);
holder.bb.setVisibility(View.VISIBLE);
if (this.dataList.size() == 1){
buttonView.setEnabled(false);
}
}else {
holder.itemCounter.setVisibility(View.VISIBLE);
holder.bb.setVisibility(View.GONE);
}
}else {
item.setClicked(false);
holder.itemCounter.setVisibility(View.GONE);
holder.bb.setVisibility(View.GONE);
holder.childRecycler.setVisibility(View.GONE);
}
if (checkboxClickListener != null) {
int pp = holder.getAdapterPosition();
if (pp != RecyclerView.NO_POSITION) {
checkboxClickListener.onCheckboxClicked(pp, isChecked);
}
}
});
holder.checkBox.setChecked(item.isSelected());
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.setSelected(((CheckBox) v).isChecked());
}
});
holder.bb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pp = holder.getAdapterPosition();
if (pp != RecyclerView.NO_POSITION) {
item.setClicked(true);
onPouchItemsButtonClickListner.onButtonClick(pp);
}
}
});
if (item.isClicked()){
if (holder.childRecycler.getVisibility() == View.GONE){
holder.childRecycler.setVisibility(View.VISIBLE);
//set pouch instruments
setPouchInstruments(holder.childRecycler, holder.getAdapterPosition(), pouchItems);
}
}
}
Here’s view holder for child adapter:
public void onBindViewHolder(@NonNull ChildAdapter.ChildViewHolder holder, int position) {
// Log.d("child", " This is child running" + ss.entrySet().size());
if( this.i < ss.entrySet().size())
// Log.d("child", " This is child running" + ss.entrySet().size());
holder.ins_name.setText(this.keys.get(i));
holder.count.setText(this.values.get(i));
public int getItemCount() {
// Log.d("newitems", "list size is " + ss.size());
public static class ChildViewHolder extends RecyclerView.ViewHolder {
TextView ins_name, count;
public ChildViewHolder(@NonNull View itemView, final onItemAddListener listener, int position, ArrayList<String> keys) {
ins_name = itemView.findViewById(R.id.ins_name);
count = itemView.findViewById(R.id.ins_count);
inc = itemView.findViewById(R.id.incbtn);
dec = itemView.findViewById(R.id.decbtn);
inc.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Log.d("child", ins_name.getText().toString() + " is it true " + keys.contains(ins_name.getText().toString()));
listener.onIncclick(getAdapterPosition(), position, ins_name.getText().toString(), "increase");
dec.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
listener.onIncclick(getAdapterPosition(), position, ins_name.getText().toString(), "decrease");
<code>@Override
public void onBindViewHolder(@NonNull ChildAdapter.ChildViewHolder holder, int position) {
// Log.d("child", " This is child running" + ss.entrySet().size());
if( this.i < ss.entrySet().size())
{
// Log.d("child", " This is child running" + ss.entrySet().size());
holder.ins_name.setText(this.keys.get(i));
holder.count.setText(this.values.get(i));
this.i++;
}
}
@Override
public int getItemCount() {
// Log.d("newitems", "list size is " + ss.size());
return ss.size();
}
public static class ChildViewHolder extends RecyclerView.ViewHolder {
TextView ins_name, count;
Button inc, dec;
public ChildViewHolder(@NonNull View itemView, final onItemAddListener listener, int position, ArrayList<String> keys) {
super(itemView);
ins_name = itemView.findViewById(R.id.ins_name);
count = itemView.findViewById(R.id.ins_count);
inc = itemView.findViewById(R.id.incbtn);
dec = itemView.findViewById(R.id.decbtn);
inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Log.d("child", ins_name.getText().toString() + " is it true " + keys.contains(ins_name.getText().toString()));
listener.onIncclick(getAdapterPosition(), position, ins_name.getText().toString(), "increase");
}
});
dec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onIncclick(getAdapterPosition(), position, ins_name.getText().toString(), "decrease");
}
});
}
}
</code>
@Override
public void onBindViewHolder(@NonNull ChildAdapter.ChildViewHolder holder, int position) {
// Log.d("child", " This is child running" + ss.entrySet().size());
if( this.i < ss.entrySet().size())
{
// Log.d("child", " This is child running" + ss.entrySet().size());
holder.ins_name.setText(this.keys.get(i));
holder.count.setText(this.values.get(i));
this.i++;
}
}
@Override
public int getItemCount() {
// Log.d("newitems", "list size is " + ss.size());
return ss.size();
}
public static class ChildViewHolder extends RecyclerView.ViewHolder {
TextView ins_name, count;
Button inc, dec;
public ChildViewHolder(@NonNull View itemView, final onItemAddListener listener, int position, ArrayList<String> keys) {
super(itemView);
ins_name = itemView.findViewById(R.id.ins_name);
count = itemView.findViewById(R.id.ins_count);
inc = itemView.findViewById(R.id.incbtn);
dec = itemView.findViewById(R.id.decbtn);
inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Log.d("child", ins_name.getText().toString() + " is it true " + keys.contains(ins_name.getText().toString()));
listener.onIncclick(getAdapterPosition(), position, ins_name.getText().toString(), "increase");
}
});
dec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onIncclick(getAdapterPosition(), position, ins_name.getText().toString(), "decrease");
}
});
}
}