有人可以解释一下为什么以下代码不起作用? 每次用户点击刷新按钮时,我都会尝试更新我的报告列表,其中包含以下代码
在updateReports
中(在完成所有数据下载和解析之后):
reportsList = newReportsList;
listAdapter.notifyDataSetChanged();
以前在onCreateView
:
listAdapter = new ReportsListAdapter(activity, R.layout.list_item_reports, reportsList);
listView.setAdapter(listAdapter);
但是列表不会刷新并继续显示旧报告。我尝试使用listAdapter.clear()
和listAdapter.add()
使用for
(我不能使用addAll
,因为我需要使用API 10)但它给了我一个空指针异常。
有哪些策略可以尽可能以最干净的方式进行替换?
答案 0 :(得分:3)
reportsList = newReportsList;
listAdapter.notifyDataSetChanged();
不起作用,因为您只是通过引用reportsList
更新引用newReportsList
保留。这不会更新适配器具有的引用(对原始数组的原始引用)
您的第二种方法应该有效,但您需要发布课程代码并提供NullPointerException
的详细信息。
答案 1 :(得分:1)
首先检查下载后是否真正调用了方法updateReports。 再次检查你的reportsList是否确实改变了内容,你只需在使用newReportsList进行分配之前和之后记录它的值。
答案 2 :(得分:0)
这不是我想要的解决方案,但在找到我的问题的解释之前,我将重置适配器:
reportsList = newReportsList;
listView.setAdapter(listAdapter);
此处有更多信息和方法: Android List view refresh
答案 3 :(得分:0)
reportsList.clear();
reportsList.addAll(newReportsList);
listAdapter.notifyDataSetChanged();
这应该有效