如何编辑清单 Recycler 项目以及新选择的项目

How to edit the checkedlist Recycler items along with newly selected items

我在应用程序的编辑详细信息屏幕中显示了一个选中的 recyclerview。当我进入编辑屏幕时,我能够将之前 selected 的项目标记为已检查,工作正常,但我的挑战是我无法编辑之前 selected 的项目以及新 selected 项目。我的服务器中只更新了新的 selected 项目。

例如:我之前 select编辑了 {1,2} 个位置项目,当我进入编辑屏幕时,1,2 项目被标记为已选中,其余标记为未选中。现在,如果我 select 新项目{3,4} 只有 {3,4} 以前添加 selected 项目{1,2} 未添加,有时它们甚至不可编辑。

这是我的取景器class:

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

        //if true, your checkbox will be selected, else unselected
        holder.checkBox.setChecked(allMarketingOptions.get(position).isSelected());

        for(int i=0;i<model.getTargetedMarketingOption().size();i++){
            if(model.getTargetedMarketingOption().get(i).equals(allMarketingOptions.get(position).getEmailGroupName())){
                holder.checkBox.setChecked(true);
            }
        }

        holder.cell.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isChecked = !holder.checkBox.isChecked();
                holder.checkBox.setChecked(isChecked);
                guestListener.OnMultipleMarketOptListener(position, isChecked);
            }
        });

这是我 activity 中的 selected 项目列表:

@Override
    public void OnMultipleMarketOptListener(int position, boolean isChecked) {

        allMarketingOptions.get(position).setSelected(isChecked);
        allMarketOptionsAdapter.notifyDataSetChanged();
    }

你应该再了解一下recyclerView的滑动原理,然后再试着理解我下面的做法

在你的适配器中:

hashMap<Int,Boolean> checkStatusMap,// int is position, Boolean is CheckStatus

在你的听众中 class:

//Ensure that the current location is correct in recyclerView
int mPosition ;
void updateViewByPosition(int position){
   mPosition=position
   checked= getCheckStatusByPosition(mPosition,checkStatusMap);
   holder.checkBox.setChecked(checked);//new 
 }

@Override
public void onClick(View v) {
   boolean newChecked= !getCheckStatusByPosition(mPosition,checkStatusMap);
   SaveCheckStatusByPosition(newChecked,mPosition,checkStatusMap);//You need a map or list to store state
   holder.checkBox.setChecked(newChecked);//new
 }

在你的 onCreateViewHolder 方法中:

viewHolder.setOnClickListener(listener);//You need to implement a listener

这是在您的 onBindViewHolder 中获取的选定项目列表:

@Override
public void onBindViewHolder(int position) {
    viewholder.getlistener.updateViewByPosition(position);
}

你上传网络的地方:

updateDataByCheckMap(apater.getMap());