我正在使用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();
}
使用以下格式的屏幕截图进行必要的更改:
例如:[“古董”,“工艺”,“船”]当我进入此屏幕时,需要将项目设置为选中/选中。
答案 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);
});
}