适配器 notifyDataSetChanged 不起作用。

3

编辑2:

我解决了我的问题,但是我不知道怎么解决的:S 我稍微移动了一下我的代码片段,突然它就起作用了。可能是以错误的顺序做了某些事情,但是很奇怪,检查了很多次。感谢你们的帮助,非常抱歉我不能发布答案;)

您好。

我有一个列表视图,我正在尝试刷新它,以便在向底层数组列表添加元素时更新它自己。

这是代码片段:

private void addEvent() {
    arrlEvents.add( event );
    adptEvents.notifyDataSetChanged();
    updateSaveFile();
    filterList();
}

arrlEvents是包含事件的基本arraylist,我正在添加一个事件,尝试使用notifyDataSetChanged()更新列表视图,但它不起作用。有人可以帮忙吗?

谢谢您的时间:)

编辑: 以下是适配器的源代码:

private ArrayAdapter<Event> adptEvents;
adptEvents = new ArrayAdapter<Event>( EventCalendar.this, R.layout.list_items, arrlEvents );

如果您能发布适配器的源代码,那将会很有帮助。 - Felix
完成了,请查看。 - lands
2个回答

2

我发现有时候它会随机地不通知适配器。

尝试在全局范围内将adptEvents设置为protected或public。

当这种方法不起作用时,你可以重新设置适配器,只需将notifyDataSetChanged()替换为:

adptEvents = new ArrayAdapter<Event>( EventCalendar.this, R.layout.list_items, arrlEvents );

编辑:

这是我写的一个应用程序中的代码片段,可以正常工作。

类定义:

public class ClassName extends ListActivity implements AdapterView.OnItemSelectedListener {

全局变量:

CustomAdapter adapter;

在OnCreate()方法中:

adapter = new CustomAdapter(this,R.layout.layout_name,dataSet);
setListAdapter(adapter);

每当我需要通知时

adapter.notifyDataSetChanged();

我编辑了我的回答,那段代码至少在模拟器Api 7和8以及运行2.2的Nexus One上可以工作。 - blindstuff
这就是我最终得出的结果,除了implements部分。选择它作为正确答案 ;) - lands

2

arrlEvents和adptEvents之间没有持久的链接,后者只是从前者中初始化自己的元素。adptEvents无法知道arrlEvents何时发生了变化。

要添加新项,您应该调用adptEvents.add(event),不需要显式调用notifyDataSetChanged(),因为ArrayAdapter.add()会自动为您执行该操作


这更像是一个答案而不是一个提示... :) - Reuben Scratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接