当前位置: 首页 > 知识库问答 >
问题:

当RecyclerView正在计算布局或在尝试从RecyclerView中删除项时滚动时,无法调用此方法

岳英耀
2023-03-14

我正在使用notify datasetchanged,我可以解决这个问题吗?

public class AdapterIntransit extends RecyclerView.Adapter<AdapterIntransit.ViewHolder> {
    private Context context;
    List<DataIntransit> data;

    public AdapterIntransit(Context context, List<DataIntransit> data) {
        this.context = context;
        this.data = data;
    }

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

    @Override
    public void onBindViewHolder(AdapterIntransit.ViewHolder holder, int position) {
        if (data.get(position).getJml1() - data.get(position).getJml2() <= 0) {
            data.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, getItemCount());
            notifyDataSetChanged();
        } else {
            holder.kode.setText(data.get(position).getKode());
            holder.nama.setText(data.get(position).getNama());
            holder.jumlah.setText(String.valueOf(data.get(position).getJml1() - data.get(position).getJml2()));
        }
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView kode, nama, jumlah;
        public ViewHolder(View itemView) {
            super(itemView);
            kode = (TextView)itemView.findViewById(R.id.kode);
            nama = (TextView)itemView.findViewById(R.id.nama);
            jumlah = (TextView)itemView.findViewById(R.id.jumlah);

        }
    }
}

共有1个答案

幸阳波
2023-03-14

下面的答案对我有效

这只是该问题的解决方案

当您在后台线程上调用NotifyDataSetChanged()时,通常会出现这种情况。因此只需将notify移动到UI线程

dialeecyclerView.post(new Runnable()
            {
                @Override
                public void run() {
                myadapter.notifyDataSetChanged();
            }
            });
 runOnUiThread(new Runnable(){
 public void run() {
      // UI code goes here
 }
 });
 类似资料:
  • 请注意:我已经检查了SO上的其他问题,虽然我可以消除错误,但它还有其他问题。 下面是我现有的代码: 我的适配器类: 修改代码查看各种答案: 现在,我没有得到错误,但是每次都被调用两次,并且recyclerview中的视图每次都在刷新。我做错了什么?请参阅logcat输出:

  • 好的,所以这有点复杂,我有一个自定义的RecolyerView适配器,在OnBindViewWholder方法中,我希望根据一些不同的变量从RecolyerView中删除当前项,但当我从ArrayList中删除该项并调用得到:。 如何从OnBindViewWholder中的RecyclerView中删除该项?,我不想在设置适配器之前这样做,因为recyclerview中的每个项都有一个子列表,如果

  • 问题内容: 我想知道,当我向下或向上滚动时,我的图像和布局的颜色会乱七八糟,我使用recyclerview创建了cardview。并设置图片(在点击时更改颜色,以了解其用户喜欢的项目),并将setbackgroundcolor(随机选择)设置为父版面,以使Cardview更具吸引力。但是当我滚动1.图像更改位置的图像时,2.布局背景自动更改颜色。 我在这里发布适配器的代码。 } 问题答案: 我已经

  • 我有一个带有适配器和ViewHolder类的RecyclerView,所以它是3个类,我在我的ViewHolder中添加了一个onLongClick,当它被长时间单击时,所选项目将被删除,我删除它如下所示: 项目: > Item_1 Item_2 Item_3 Item_4 Item_5 我的数据项大约有7项,所以下面是发生的情况。第一次删除时,它会删除正确的项目;当您再次单击“删除”时,它将删除

  • 我正在用AppWidgetHostViews填充RecyclerView。它们被排序一个比一个低,每个都有删除按钮旁边。这就是我如何设置RecyclerView和适配器(Event.Object是AppWidgetHostView): 这是保存AppWidgetHostViews的适配器: 因此它再次为适配器设置数据并通知数据集已更改。 但问题是,当我单击“删除”按钮时,项目没有被正确删除。Vie

  • 我有四个选项卡和四个片断(每个片断代表每个选项卡)。 每个片段都有一个垂直的回收器视图。由于所有片段视图看起来都很相似,我重新使用了相同的布局文件、相同的回收器视图项和相同的适配器。 问题是在第一个选项卡和第三个选项卡和第四个选项卡下只加载了一个项,而第二个选项卡成功地加载了整个数据。 我希望下面添加的图片能更好地理解这个问题。 这是我的适配器代码 我想指出几件事- 和其他答案提到的对所有支持库使