如何编辑清单列表中的回收站项目以及新选择的项目

时间:2019-03-16 14:17:57

标签: android android-recyclerview oncheckedchanged

我在应用程序的“编辑详细信息”屏幕中显示一个选中的recyclerview。当我进入编辑屏幕时,我能够将先前选择的项目标记为已正常工作,但是我面临的挑战是我无法将先前选择的项目与新选择的项目一起进行编辑。我的服务器中仅更新了新选择的项目。

例如:例如,我选择了{1,2}个位置项目,当我进入编辑屏幕时,有1,2个项目被标记为已选中,而其余仍被标记为未选中。现在,如果我选择新项目{3,4},则仅{3,4}添加了先前选择的项目{1,2},而没有添加,有时甚至无法编辑。

这是我的观察者类:

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

以下是我活动中的选定项目列表:

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

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

1 个答案:

答案 0 :(得分:1)

您应该再次了解recyclerView的滑动原理,然后尝试了解我在下面的工作。

在您的适配器中

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

在您的侦听器类中:

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