列表视图选择不是';Android jellybean上显示的t
我有一个listview,它已经按预期工作了一段时间。最近,一位用户将他们的设备软件更新为JellyBean,而现在按下listview选项时不会更新 在后台,onTouchEvent()方法启动(然后适配器的onItemClick())并将选择设置为“在引擎盖下”,它不会显示为已选择。但是,如果设备现在已旋转且方向已更改,则选择高亮显示在重画上 我搜索了其他问题,找到的最接近的问题是一个被重写的onAttachedToWindow()方法,并且没有调用它的超级实现,但是这里不是这样列表视图选择不是';Android jellybean上显示的t,android,listview,android-4.2-jelly-bean,Android,Listview,Android 4.2 Jelly Bean,我有一个listview,它已经按预期工作了一段时间。最近,一位用户将他们的设备软件更新为JellyBean,而现在按下listview选项时不会更新 在后台,onTouchEvent()方法启动(然后适配器的onItemClick())并将选择设置为“在引擎盖下”,它不会显示为已选择。但是,如果设备现在已旋转且方向已更改,则选择高亮显示在重画上 我搜索了其他问题,找到的最接近的问题是一个被重写的onAttachedToWindow()方法,并且没有调用它的超级实现,但是这里不是这样 有没有其他
有没有其他人在JellyBean上看到过类似的问题,并且知道解决方案?在每个选项上都添加了对adapter.notifyDataSetChanged()的调用
这并不理想,因为我怀疑大型数据集的性能会受到影响。解决此问题的更好方法是使用listview的invalidateViews()函数 ListView.invalidateViews()用于通知ListView使其所有子项视图无效(重新绘制它们)。WhileAdapter.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 */
}
});
public-void-onItemClick(适配器视图av、视图v、内部位置、长id){
//TODO自动生成的方法存根
listview.invalidateViews();
/*你的代码
到这里来*/
}
});
您也可以对GridView使用相同的函数。您尝试过通过invalidate强制listview重画吗?是的,我尝试过invalidate()、refreshDrawableState()和forceLayout()。没有任何效果。在多玩一点之后,adapter.notifyDataSetChanged()似乎会强制刷新,但我的印象是,出于性能原因,这应该只在插入或删除后调用,为什么每次都需要这样做?您如何支持listview数据?用装载机还是别的什么?