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

标签 java android arraylist

我正在 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/

相关文章:

java - 将 Angular 4 与 Struts 2 集成

java - 从 HTTP 事件流 Java 中提取数据

java - BufferedImage 与 VolatileImage 的当前状态

android - 尝试使用 getBytes(Charset) 时为 "VFY: dead code"

java - Libgdx - 将舞台添加到屏幕结构

java - 比较两个表中的值并将从第一个表中获取的值插入到第二个表中

java - JasperReports 字体扩展 +~JF*****.tmp 文件

Android RecyclerView - 触摸时动画项目提升

android - BaseExpandableListAdapter RuntimeError NullPointerException

java - 'java.util.ArrayList' 未经检查的分配