简体   繁体   中英

How to show a checked items as checked in Edit mode using a RecyclerView?

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();
    }

Required Screen change : 当我进入此适配器类时,需要检查这三个项目

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM