gpt4 book ai didi

java - 数据在数组列表中自动存储多次

转载 作者:行者123 更新时间:2023-12-02 12:13:51 26 4
gpt4 key购买 nike

我正在 android 中从我的数据库创建一个数组列表,以便在回收器 View 的适配器中使用:

RecyclerView recyclerView = (RecyclerView) getView().findViewById(R.id.homeRecycler);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
ArrayList<StocksforHome> stockList = new ArrayList<>();
DbInteract interact = new DbInteract(getContext());
Cursor cursor = interact.readtable();
HomeFragmentAdapter homeFragmentAdapter = new HomeFragmentAdapter(stockList, getContext());
GetHomeData getHomeData = new GetHomeData(getContext(),homeFragmentAdapter);
int i=0;
stockList.clear();
while(cursor.moveToNext())
{
StocksforHome temp = new StocksforHome();
temp.stock = cursor.getString(cursor.getColumnIndex(eventDBcontract.ListofItem.columnsym));
stockList.add(temp);
}
homeFragmentAdapter.addall(stockList);
Log.d(tag,String.valueOf(stockList.size()) + " " + String.valueOf(cursor.getCount()));
recyclerView.setAdapter(homeFragmentAdapter);

数据库中只有一个数据,但 arraylist 的大小仍然是 2。我检查了额外的数据与第一个数据重复。日志报告:

D/HomeFragment: 2 1

我制作了一个自定义适配器。它的addall方法是:

 public void addall(ArrayList<StocksforHome> more)
{
stockArrayList.addAll(more);
notifyDataSetChanged();
}

知道为什么会发生这种情况以及如何解决吗?

最佳答案

这是因为适配器中的 stockList 和代码 fragment 中的 stockList 是相同的引用,结果项被添加了两次。要修复此适配器需要他自己的 List 实例。

首先添加:

stockList.add(temp);

第二个添加:

homeFragmentAdapter.addall(stockList);

像这样修复适配器:

HomeFragmentAdapter {

private final List<StocksforHome> stockList = new Arraylist<>();

public HomeFragmentAdapter(Context context) {
}

public void addall(List<StocksforHome> more) {
stockList.clear();
stockList.addAll(more);
notifyDataSetChanged();
}
}

关于java - 数据在数组列表中自动存储多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338614/

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