我有一个listview,已经按预期工作了一段时间。最近,用户将他们的设备软件更新为JellyBean,现在按下时列表视图选择不会更新。
在后台,onTouchEvent()方法触发,(然后是适配器的onItemClick())并且选项设置在“引擎盖下”,它根本不显示为选中状态。但是,如果现在旋转设备并更改方向,则重绘时会显示选择突出显示!
我已经搜索了其他问题,我找到的最接近的是被覆盖的onAttachedToWindow()方法,而不是调用它的超级实现,但是这不是这里的情况!
有没有其他人在JellyBean上看到类似的问题,并知道解决方案?
答案 0 :(得分:0)
在每个选择上添加了对adapter.notifyDataSetChanged()的调用。
不太理想,因为我怀疑大型数据集的性能会受到影响。
答案 1 :(得分:0)
更好地解决这个问题的方法是使用listview的invalidateViews()函数。
ListView.invalidateViews()用于告诉ListView使其所有子项视图无效(重绘它们)。当 Adapter.notifyDataSetChanged()时,是告诉适配器的观察者正在调整的内容已经改变。
在这种特殊情况下,ListView.invalidateViews()似乎是一个更好的选择,因为您的数据集未更新,您只需要重绘视图。
在你的OnItemClick中插入listview.invalidateViews(),你就可以了。
public void onItemClick(AdapterView<?> av, View v, int position,long id) {
// TODO Auto-generated method stub
listview.invalidateViews();
/* YOUR CODE
GOES HERE */
}
});
您也可以对GridView使用相同的功能。