【问题标题】:View resets after scrolling in RecyclerView在 RecyclerView 中滚动后视图重置
【发布时间】:2018-12-21 06:43:27
【问题描述】:

我正在使用 RecyclerView 在 GridManager 上实现多项选择。

这是我在适配器中的代码

imgStamps.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {

                    //First setting up isSelected() or not

                    if (imageList.get(getAdapterPosition()).isSelected()) {
                        imageList.get(getAdapterPosition()).setSelected(false);
                    } else {
                        imageList.get(getAdapterPosition()).setSelected(true);
                    }

                   //Setting blur image on Imageview onLongclick and resting on again press.
                    if (imageList.get(getAdapterPosition()).isSelected()) {
                        mCount++;
                        imgBlurr.setVisibility(View.VISIBLE);
                    } else {
                        mCount--;
                        imgBlurr.setVisibility(View.GONE);
                    }
                    mCommunicator.clicked(mCount, getAdapterPosition());
                    return true;
                }
            });

上面的代码在ViewHolder里面而不是onBindViewHolder里面。

如果我选择第一张图像并向下滚动然后向上滚动,则视图将被重置。

可以指出错误或行为吗?

【问题讨论】:

  • 您是否也在onBindViewHolder() 中适当地设置了可见性?如果没有,那是你的问题。

标签: android android-recyclerview android-viewholder


【解决方案1】:

RecyclerView 会重复使用您的布局。把你的逻辑放在onBindViewHolder 方法上。

欲了解更多信息,请探索这个问题 How to properly highlight selected item on RecyclerView?

【讨论】:

    【解决方案2】:

    RecyclerView 将在您滚动时重用您的项目视图。要管理多选,您必须具有一组选定位置(或选定模型)。和onBindViewHolder,检查这个数组中的位置来检查项目是否被选中。更多详细实现请参考:Multi selection in RecyclerView?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2016-11-02
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多