Как редактировать проверенный список элементов Recycler вместе с вновь выбранными элементами - PullRequest
2 голосов
/ 16 марта 2019

Я показываю проверенный просмотрщик в окне редактирования информации приложения.Когда я перехожу на экран редактирования, я могу сделать так, чтобы ранее выбранные элементы были помечены как отмеченные как работающие, но моя проблема в том, что я не могу редактировать ранее выбранные элементы вместе с новыми выбранными элементами.На моем сервере обновляются только новые выбранные элементы.

Например, ранее я выбирал {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 Ответ

1 голос
/ 16 марта 2019

Вы должны снова понять скользящий принцип 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());
...