Android notifyDataSetChanged()在recyclerview上做什么?为什么每次调用notifyDataSetChanged()时它都不断添加新数据?
我正在尝试在我的recyclerview方法上实现此方法 我正确地遵循了脚本,它按照我想要的方式工作。是的,它会改变颜色,但每次我点击该项目时,它似乎都会不断添加新数据。我用的是2个回收站 我在第一个recyclerview上的方法调用了另一个方法来再次绘制recyclerview。就像我们调用第一个recyclerview时,它也调用第二个recyclerview 这是我的剧本:Android notifyDataSetChanged()在recyclerview上做什么?为什么每次调用notifyDataSetChanged()时它都不断添加新数据?,android,android-recyclerview,Android,Android Recyclerview,我正在尝试在我的recyclerview方法上实现此方法 我正确地遵循了脚本,它按照我想要的方式工作。是的,它会改变颜色,但每次我点击该项目时,它似乎都会不断添加新数据。我用的是2个回收站 我在第一个recyclerview上的方法调用了另一个方法来再次绘制recyclerview。就像我们调用第一个recyclerview时,它也调用第二个recyclerview 这是我的剧本: @Override public void onBindViewHolder(final ViewHold
@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));
}
}
@覆盖
公共无效onBindViewHolder(最终视图持有人,最终整型位置){
holder.viewItem.setHasFixedSize(true);
LinearLayoutManager布局管理器=新的LinearLayoutManager(上下文,LinearLayoutManager.VERTICAL,true);
holder.viewItem.setLayoutManager(layoutManager);
HoriSpacingDecoration HoriSpacingDecoration=新的HoriSpacingDecoration(Utils.convertDpToPixel(10,上下文));
支架.视图项.附加装饰(水平面装饰);
adapterChart=新的ChartItemAdapter(上下文);
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);
日志d(标签“onBindViewHolder:pembulatan”+ci);
ukuran=Integer.parseInt(mItems.get(position))/botol;
if(Integer.parseInt(mItems.get(position))%10notifyDataSetChanged()
在recyclerview
上做什么
来自文档
adapterChart.addData(mitemchart);
在BindViewHolder上的
这意味着,无论何时调用您的onBindViewHolder
,您都是在您的
中添加数据,当您调用notifyDataSetChanged()时,它调用的是OnBindView,而在您的on bind视图中,您是在forloop中添加数据,以便它再次添加数据
你可以做一件事来克服这个问题
声明布尔变量isAdded=false
if(!isAdded){
//your for loop here
//add data here
//and make isAdded true
isAdded = true;
}
如何避免它?我只能更新我的项目外观而不是数据吗?@Iganov当你想在你的adapterChart
中添加新数据时,这取决于你的要求。我终于明白了我的方法发生了什么。它不会添加新数据,但会不断添加这个行保持器。viewItem.addItemDecoration(horiSpacingDecoration);这改变了我的布局外观我假设这会不断添加新数据。结果表明,这不是添加新数据,而是添加了第二行中每个项目的边距recyclerview@NileshRathod谢谢你的回答。如果没有你的回答,我将无法在我的代码中找到错误。我也已经解决了。谢谢你的回答!