我正在从适配器中删除一个元素,该元素应该被删除,并在UI中刷新ListView。会发生什么事情是该元素确实从适配器中删除,但仍然保留在列表中,直到列表被手动刷新(打开另一个片段,然后返回到List片段并繁荣!删除的元素确实不再在列表)。但我希望立即刷新清单!
以下是我用于删除的内容:
ClockAdapter myAdapter = (ClockAdapter)listView.getAdapter();
Alarm myAlarm = myAdapter.getItem(selectedPosition);
MyAlarmManager.deleteAlarm(myAlarm);
myAdapter.notifyDataSetChanged();
非常感谢任何帮助!
答案 0 :(得分:4)
您还需要从Adapter
中删除项。拨打:
ClockAdapter myAdapter = (ClockAdapter)listView.getAdapter();
//...
Alarm myAlarm = myAdapter.getItem(selectedPosition);
myAdapter.remove(myAlarm);
myAdapter.notifyDataSetChanged();
答案 1 :(得分:1)
notifyDataSetChanged ()
- doc说,
Notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself.
因此,调用它会告诉适配器传递给它的数据(在您的情况下是一个警报列表)已被修改,因此它应该刷新。这意味着您的适配器将再次从您附加到它的数据结构中读取和加载数据。
因此,要使适配器反映删除,您也必须从该列表中删除它。
说,您的适配器附有ArrayList<Alarm> called myArrayAlarm
,然后您应该从中删除它。
你可以打电话,
myArrayAlarm.remove(myAlarm)
myAdapter.notifyDataSetChanged();
菲利普的方式也是正确的。 :)
答案 2 :(得分:0)
删除项目后,请始终添加以下两行
notifyDataSetChanged();
notifyDataSetInvalidated();