如何编辑清单 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());
我在应用程序的编辑详细信息屏幕中显示了一个选中的 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());