繁体   English   中英

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

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

我正在使用android recyclerview显示项目列表,能够通过MultipleSelect界面选择多个项目,并且我需要显示先前选择/选中的项目已设置为在recyclerview的编辑模式下选中的项目。

我无法在代码中获得此业务逻辑。 谁能帮我一个忙,我是android开发的新手。

我正在从服务器以阵列列表格式获取预先选择的项目:

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

此InterestsList项目需要在Recyclerview中设置为选中/选中,并且用户再次可以修改需要选择更多项目或从之前选择的项目中删除并保存数据的项目。

如何为此编写简单的逻辑?

具有Recycler项目列表数据的字符串ArrayList,InterestsList是已检查项目列表数据。

适配器校准:

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

    }

在我的活动类中使用的接口侦听器下面选择多个项目:

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

屏幕截图,用于以下格式的必要更改:

例如:[“古董收藏”,“工艺品”,“划船”]进入此屏幕时,需要将项目设置为选中/选中。

在此处输入图片说明

从模型中获得一个选定的结果,并检查该结果是否等于所有者的文本名称。 如果两者相等,则使复选框为true。 例如:

@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.

像这样修改您的代码。 希望对您有帮助。

@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