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

时间:2019-02-25 11:33:25

标签: java android multi-select

我正在使用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();
    }

使用以下格式的屏幕截图进行必要的更改:

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

enter image description here

3 个答案:

答案 0 :(得分:0)

从模型中获取一个选定的结果,并检查该结果是否等于所有者的文本名称。如果两者相等,则使复选框为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);

    }
}

答案 1 :(得分:0)

在您的列表中保留一个布尔变量,如果选中复选框,则取消选中它们,然后相应地更改布尔变量的值(如true和false),并在其通知您的列表之后。

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

答案 2 :(得分:0)

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

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

}
相关问题