【问题标题】:Recycleview Scrolling Issue Add Element arraylist again and again scroll down and upRecyclerview 滚动问题添加元素数组列表一次又一次地向下和向上滚动
【发布时间】:2018-07-10 07:30:05
【问题描述】:

当屏幕出现问题时,某些项目被打开添加一个数组列表并向下滚动然后再次向上滚动这个值再次添加到数组列表中,请作为快速解决方案。

public class NeedSizeAdapter extends RecyclerView.Adapter<NeedSizeAdapter.ViewHolder> {

        private List<SizeModel> sizeModelList;


        public NeedSizeAdapter(List<SizeModel> numbers) {
            this.sizeModelList = new ArrayList<>(numbers);
            selecteSizeList = new ArrayList<>();
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_rv_notificationsetting, parent, false);
            return new ViewHolder(v);
        }

        @Override
        public void onBindViewHolder(final ViewHolder holder, final int position) {
            holder.bindData(sizeModelList.get(position));

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

            //if true, your checkbox will be selected, else unselected


        holder.mSwitch.setChecked(sizeModelList.get(position).isSelected());
                if (sizeModelList.get(position).isSelected()) {
                    selecteSizeList.add(sizeModelList.get(position).getSizeId());
                    Log.d("selectedSize", sizeModelList.get(position).getSizeId());
                }
                holder.mSwitch.setTag(sizeModelList.get(position));

                holder.mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        Switch cb = (Switch) buttonView;
                        SizeModel contact = (SizeModel) cb.getTag();

                        contact.setSelected(cb.isChecked());
                        sizeModelList.get(position).setSelected(cb.isChecked());
    //                    sizeModelList.get(holder.getAdapterPosition()).setSelected(isChecked);
                        if (isChecked) {
                            selecteSizeList.add(sizeModelList.get(position).getSizeId());
                        } else {
                            selecteSizeList.remove(sizeModelList.get(position).getSizeId());
                        }


                    }
                });
        }

        @Override
        public int getItemCount() {
            return sizeModelList.size();
        }

【问题讨论】:

  • 如何填充适配器?如果你有 scrollListener 请也发布它。
  • 取一个全局布尔值并存储 isSelected 的状态,然后检查条件 (if (sizeModelList.get(position).isSelected() &amp;&amp; isTrue) { ) 和布尔值。

标签: android


【解决方案1】:

您需要重写方法 getItemId 和 getItemViewType

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
   return position;
}

这里回答了。 在此处查看原始答案: Android RecyclerView Duplicate Item When Scrolling

【讨论】:

  • 但是使用recycleview两种方法不可用
【解决方案2】:

我认为是

if (sizeModelList.get(position).isSelected()) {
                selecteSizeList.add(sizeModelList.get(position).getSizeId());
                Log.d("selectedSize", sizeModelList.get(position).getSizeId());
            }  

多余的。因为你已经添加setOnCheckedChangeListener所以你可以删除

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多