【问题标题】:Android BaseAdapter.notifyDataSetChanged() does not refresh viewAndroid BaseAdapter.notifyDataSetChanged() 不刷新视图
【发布时间】:2012-02-13 03:02:34
【问题描述】:

我有一个GridView,并附有一个BaseAdapterGridView 本身包含在 ViewFlipper 中。

我通过在ViewFlipper 上调用setDisplayedChild() 方法来显示GridView,然后我更新由BaseAdapter 检查的数据集,最后我在适配器上调用notifyDataSetChanged()。 它通常不会用新内容刷新GridView,或者有时会随机刷新它,因此看起来无法预测。

我注意到,当我将设备旋转到新方向时,视图会自行刷新并正确加载适配器数据。当设备进入待机状态并且我解锁它时发生了同样的情况,视图神奇地被新数据刷新了。

我尝试在UIThread 中调用notifyDataSetChanged(),我尝试通过调用forceLayout()requestLayout()invalidate()invalidateChildren() 等来强制刷新视图,但没有任何变化。

即使我从按钮调用notifyDataSetChanged() 也没有任何反应,只要旋转设备或锁定和解锁它就会刷新视图。

我正在使用 Android 3.2 的华硕平板电脑上进行开发。

有人可以帮助我或给我一些提示吗?

非常感谢!

【问题讨论】:

  • 放了一些日志后,我注意到当视图不刷新时,适配器方法getCount()、getView()等根本不会被调用。但是当我“旋转”我的设备或我锁定/解锁屏幕时,它们会被调用,并且视图会刷新。
  • 已解决:问题出在 ViewFlipper 上。我将 GridView 放在另一个活动上,一切正常。

标签: java android gridview refresh listadapter


【解决方案1】:

如果您的视图没有通过使用上述所有方法刷新,那么您必须重新绘制网格视图,或者您可以在设置网格适配器时做一件事,将这些行放在 Resume 方法上,并在进行更改后调用 onResume()你的数据。

【讨论】:

  • 重绘 GridView 导致黑屏(我用相同的适配器制作了另一个 GridView 实例,删除了旧的并添加了新的,但新的没有显示为黑色。我尝试了 resume 方法但没有结果。
  • 已解决:问题出在 ViewFlipper 上。我将 GridView 放在另一个活动上,一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多