【问题标题】:adapter.notifyDataSetChange() not working after called from onResume()从 onResume() 调用后,adapter.notifyDataSetChange() 不起作用
【发布时间】:2012-11-18 21:08:46
【问题描述】:

我遇到了一个问题,当我调用 adapter.notifyDataSetChange() 以从 onResume() 函数刷新 listActifity 时,之后该活动的任何其他函数似乎都无法正常工作。

我希望当用户单击后退按钮(在另一个屏幕上)并返回到带有列表的窗口时刷新列表(视图)。 我注意到的一件事是notifyDataSetChange() 在我更改数组列表中的一个对象时起作用(来自其他函数),但当我想从ArrayList 添加或删除对象时却不行。到目前为止,这对我来说一直有效,但我不希望每次都重新查询列表。

@Override  
        protected void onResume() {  
        lightWeightDAO.open(); //db connection  
        adapter.clear();  
        buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId());   
        adapter.addAll(buckets);  
        adapter.notifyDataSetChanged();  
        super.onResume();      
    }

当我从 onResume() 中删除 notifyDataSetChange() 时,一切似乎都正常工作(只需在更改数组列表后调用一个简单的 notifyDataSetChange())。

知道为什么这不起作用吗?

【问题讨论】:

  • 对代码使用“{}”按钮
  • 请注意,大多数适配器的add()addAll() 等方法都会为您调用notifyDataSetChanged()adapterbuckets 是什么数据类型?
  • adapter 是一个ExerciseBucketArrayAdapter,它扩展了ArrayAdapter,buckets 是一个ArrayList 其中ExerciseBucket 只是一个带有getter 和setter 的可序列化数据类。希望这会有所帮助。
  • 调用 super.onResume() 作为覆盖 onResume 中的第一个方法
  • 如何在其他函数中添加数据:buckets.add()adapter.add()? (要回复特定用户,请使用@Sam,否则我可能不会注意到您回复了。)

标签: android android-adapter


【解决方案1】:

通过使用:

buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId());   
adapter.addAll(buckets);  

您只添加这个新的buckets 的内容到适配器,您没有绑定适配器到buckets。所以这个:

buckets.add(string);
adapter.notifyDataSetChanged();

对适配器内部的数据没有影响。就像我上面在 cmets 中提到的,您可以直接添加到适配器,它会为您调用 notifyDataSetChanged()。因此,只需将上面两行的所有位置替换为:

adapter.add(string);

【讨论】:

  • 谢谢山姆!这真的很有帮助。
猜你喜欢
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多