简体   繁体   English

如何在Android recyclerview中获取选中项{先前选择的数组项列表}设置为已选中{总计项}

[英]How to get Selected items {list of previously selected array items} set as checked in android recyclerview {Total items}

I'm using android recyclerview for showing list of items, able to select multiple items through MultipleSelect Interface and I need to show the previously selected/checked items are set as checked in edit mode of recyclerview. 我正在使用android recyclerview显示项目列表,能够通过MultipleSelect界面选择多个项目,并且我需要显示先前选择/选中的项目已设置为在recyclerview的编辑模式下选中的项目。

I am unable to get this business logic in my code. 我无法在代码中获得此业务逻辑。 Can anyone please help me out and I'm new to android development. 谁能帮我一个忙,我是android开发的新手。

I'm getting previoulsy selected items from server in the format arrayList: 我正在从服务器以阵列列表格式获取预先选择的项目:

InterestsList : Ex:["Antiques-Collecting","Arts-Crafts","Boating"]

This InterestsList items need to set as checked/selected in Recyclerview and again user can able to modify the items need to select more or remove from previoulsy selected and save the Data. 此InterestsList项目需要在Recyclerview中设置为选中/选中,并且用户再次可以修改需要选择更多项目或从之前选择的项目中删除并保存数据的项目。

how can I write simple logic for this? 如何为此编写简单的逻辑?

strings ArrayList having the Recycler items list data, InterestsList is the checked items list data. 具有Recycler项目列表数据的字符串ArrayList,InterestsList是已检查项目列表数据。

Adapter Calss : 适配器校准:

@Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.tvInterestName.setText(interests.get(position).getInterest().toString());

        interestList = model.getInterests();  // PREVIOUSLY SELECTED ITEMS

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

    }

Selecting Multiple items below Interface listener used in my activity class: 在我的活动类中使用的接口侦听器下面选择多个项目:

 @Override
    public void OnMultipleGuestListener(int position, boolean isChecked) {
        interestFinalList.get(position).setSelected(isChecked);
        interestsAdapter.notifyDataSetChanged();
    }

ScreenShot for required changes in Below Format: 屏幕截图,用于以下格式的必要更改:

Ex:["Antiques-Collecting","Arts-Crafts","Boating"] Items need to set as checked/selected when i come to this screen. 例如:[“古董收藏”,“工艺品”,“划船”]进入此屏幕时,需要将项目设置为选中/选中。

在此处输入图片说明

Get a single selected result from your model and checked that is equal to the holder text name or not. 从模型中获得一个选定的结果,并检查该结果是否等于所有者的文本名称。 If both are equals then make the checkbox true. 如果两者相等,则使复选框为true。 For example: 例如:

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tvInterestName.setText(interests.get(position).getInterest().toString());

    //in some cases, it will prevent unwanted situations
    holder.checkBox.setOnCheckedChangeListener(null);

    //if true, your checkbox will be selected, else unselected
   for(int i=0;i<model.getInterests().size();i++)
   if(model.getInterests().get(i).equals(interests.get(position).getInterest())){
        holder.checkBox.setChecked(true);

    }
}

在您的列表中,当复选框未选中时,请维护一个布尔变量,然后相应地更改布尔变量的值(如true和false),然后将其通知您的列表。

and inside your onbind view holder check boolean variable true or false if true then show selected otherwise unselected.

Modify your code like this. 像这样修改您的代码。 hope it will help you. 希望对您有帮助。

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tvInterestName.setText(interests.get(position).getInterest().toString());

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

    holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->
    {
        interests.get(position).setSelected(isChecked);
        guestListener.OnMultipleGuestListener(position, isChecked);
    });

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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