【发布时间】:2012-02-13 03:02:34
【问题描述】:
我有一个GridView,并附有一个BaseAdapter。 GridView 本身包含在 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