替换列表适配器中的所有条目

时间:2014-06-11 11:09:46

标签: android android-listview listadapter

有人可以解释一下为什么以下代码不起作用? 每次用户点击刷新按钮时,我都会尝试更新我的报告列表,其中包含以下代码

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)但它给了我一个空指针异常。

有哪些策略可以尽可能以最干净的方式进行替换?

4 个答案:

答案 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();

这应该有效