gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:35:05 25 4
gpt4 key购买 nike

我正在尝试在我的 recyclerview 方法上实现此方法 Changing background color of selected item in 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));
}
}

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

最佳答案

你的第一个问题

What does notifyDataSetChanged() do on recyclerview?

来自文档

notifyDataSetChanged

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

  2. 数据更改事件分为两类:项目更改和结构更改。项目更改是指单个项目的数据已更新但未发生位置更改。结构更改是指在数据集中插入、删除或移动项目。

  3. 意味着无论何时调用 notifyDataSetChanged(),它都会调用 onBindViewHolder()

你的第二个问题

why it keeps adding new data everytime i call notifyDataSetChanged()?

因为您使用以下行在您的 adapterChart 中添加新数据adapterChart.addData(mItemsChart); 在你的 onBindViewHolder

这意味着无论何时您的 onBindViewHolder 被调用,您都在向您的 adapterChart

添加数据

关于android - notifyDataSetChanged() 在 recyclerview 上做了什么?为什么每次我调用 notifyDataSetChanged() 时它都会不断添加新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52436403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com