I am unable to get one of the business logic in my application. Can anyone please help me out and I'm new to android development.
Btw I'm using android recyclerview for showing list of items, and I need to show the already checked items are has marked as check-in recyclerview.
I'm getting checked items from server : InterestsList:["Antiques-Collecting","Arts-Crafts","Boating"]
These items need to compare with my recyclerView ArrayList or Items if these items are available in recyclerview I need to show as checked the item.
how can I write simple logic for this?
strings ArrayList having the Recycler items list data, InterestsList is the checked items list data.
Here is my adapter class :
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.tvInterestName.setText(interests.get(position).getInterest().toString());
List<String> strings = new ArrayList<>(interests.size());
for (Interest object : interests) {
strings.add(Objects.toString(object, null));
}
interestList = model.getInterests();
System.out.println("LISTTTTTT @@@"+strings.toString());
System.out.println("LISTTTTTT @@@"+interestList.size());
for (int i = 0; i < strings.size(); i++) {
for (int j = 0; j < interestList.size(); j++) {
if(strings.get(i).equalsIgnoreCase(interestList.get(j))) {
holder.checkBox.setChecked(true);
}
else
holder.checkBox.setChecked(false);
}
}
//in some cases, it will prevent unwanted situations
holder.checkBox.setOnCheckedChangeListener(null);
//if true, your checkbox will be selected, else unselected
holder.checkBox.setChecked(interests.get(position).isSelected());
holder.cell.setOnClickListener(v ->
{
holder.checkBox.performClick();
});
if (interests.get(position).isSelected()) {
holder.checkBox.setChecked(true);
} else {
holder.checkBox.setChecked(false);
}
holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->
{
guestListener.OnMultipleGuestListener(position, isChecked);
});
}
Multiple Select items Interface listener used in my activity class:
@Override
public void OnMultipleGuestListener(int position, boolean isChecked) {
interestList.get(position).setSelected(isChecked);
interestsAdapter.notifyDataSetChanged();
}
As you are also capturing event when usr click on other area, lets focus on that only and ignore click on checkbox.
In xml file, make checkbox as clickable=false
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
String interest = interests.get(position).getInterest().toString();
holder.tvInterestName.setText(interest);
interestList = model.getInterests(); //assuming it's list of string from your code
//do not assign list from model here, instead do it on separate function
//of adapter because we do not need to resign same list every time to
//interestList from some other model which have nothing to do with each
//item. as this method will be called for each item
final boolean isCheck = interestList.contain(interest);
holder.checkBox.setChecked(isCheck);
holder.cell.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = !holder.checkBox.isChecked();
holder.checkBox.setChecked(isChecked );
guestListener.OnMultipleGuestListener(position, isChecked);
}
});
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.