notifyDataSetChanged() 在 recyclerview 上做什么?为什么每次我调用 notifyDataSetChanged() 时它都会不断添加新数据?

Iga*_*nov 2 android android-recyclerview

我正在尝试在我的 recyclerview 方法上实现此方法更改recyclerview中所选项目的背景颜色

我正确地遵循了脚本,它以我想要的方式工作。是的,它会改变颜色,但每次我单击该项目时,它似乎都在不断添加新数据。我正在使用 2 recyclerview。

我在第一个 recyclerview 上的方法调用了另一个方法来再次绘制一个 recyclerview。就像当我们调用第一个 recyclerview 时,它也调用了第二个 recyclerview。

这是我的脚本:

    @Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.viewItem.setHasFixedSize(true);
    LinearLayoutManager layoutManager = new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,true);
    holder.viewItem.setLayoutManager(layoutManager);

    HoriSpacingDecoration horiSpacingDecoration = new HoriSpacingDecoration(Utils.convertDpToPixel(10,context));
    holder.viewItem.addItemDecoration(horiSpacingDecoration);

    adapterChart = new ChartItemAdapter(context);
    holder.viewItem.setAdapter(adapterChart);

    mItemsChart.clear();

        holder.textView.setText(mBulan.get(position));
        int dataTertinggi = Integer.parseInt(Collections.max(mItems));
        int botol = dataTertinggi/5;
        int ci = niceround(dataTertinggi);
        Log.d(TAG, "onBindViewHolder: pembulatan " + ci);
            ukuran = Integer.parseInt(mItems.get(position))/botol;

            if(Integer.parseInt(mItems.get(position))%10 < botol)
            {
                ukuran2=1;
                ukuran+=ukuran2;
            }
            else
            {
                ukuran2=1;
                ukuran+=ukuran2;
            }

        for(int y=0;y<ukuran;y++)
        {
            mItemsChart.add(String.valueOf(y));
        }
        adapterChart.addData(mItemsChart);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,mItems.get(position) + " Bottle" ,Toast.LENGTH_SHORT).show();

                prevPos = position;
                mItemsChart.clear();
                notifyDataSetChanged();
            }
        });
    if(prevPos == position)
    {
        holder.textView.setTextColor(context.getResources().getColor(R.color.colorPrimary));
    }
    else
    {
        holder.textView.setTextColor(context.getResources().getColor(R.color.colorAccent));
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经发现问题是当我调用 notifydatasethaschanged() 时,它也调用了适配器来添加数据。我被卡住了,不知道该怎么办。也许任何人都可以为我找到解决方案。

Nil*_*hod 7

你的第一个问题

这是什么notifyDataSetChanged()做的recyclerview

来自文档

notifyDataSetChanged

  1. 通知任何已注册的观察者数据集已更改。

  2. 有两种不同类别的数据更改事件,项目更改和结构更改。项目更改是指单个项目的数据已更新但未发生位置更改。结构变化是指在数据集中插入、删除或移动项目。

  3. 意味着每当你打电话给notifyDataSetChanged()onBindViewHolder()

你的第二个问题

为什么每次我调用 notifyDataSetChanged() 时它都会不断添加新数据?

因为您正在使用在 Your adapterChartusing 下面的行中 添加新数据adapterChart.addData(mItemsChart);onBindViewHolder

这意味着每当您onBindViewHolder被调用时,您都会在您的adapterChart


归档时间:

查看次数:

2003 次

最近记录:

7 年,2 月 前