我在一个GridView中放了10行数据,由于屏幕大小的关系会产生滚动,我设置了点击GridView中的子项(子项是TextView),就改变这个TextView的字体颜色。
到这里都没有问题,假如我点击第一行中的某些数据(假如说是第一项和第三项),被点击的项字体颜色确实改变了,但是如果我往下滚动GridView,再回到上面的时候,奇异的事情发生了,原来点击过的项字体恢复到没点的情况,而不该变色的项字体变色了,而且这种现象还是随机的,请问有人碰到过这样的情况吗?或者有人知道怎么解决这个问题吗?
有答案马上结贴,在线等,谢谢了!
------解决方案--------------------
没碰到过,我觉得与gridview里面的一些机制有关吧。
------解决方案--------------------
你可以设断点看看!
------解决方案--------------------
这个问题我知道的。出现这样问题的原因是GridView的缓存机制。此机制简要表述为滑动上去的item,被android重新利用,从下面帮你滑上来了。具体表现为如何取决于你的adapter的getView方法。
要解决这个问题,需要重写getItemViewType,getViewTypeCount两个方法。如:
@Override
public int getItemViewType(int position) {
return channels.get(position).isSection ? TYPE_SECTION : TYPE_CHANNEL;
}
@Override
public int getViewTypeCount() {
return VIEW_TYPE_COUNT;
}
这样做的目的是告诉GridView你有两种ViewType,方便GridView缓存的时候区分这两种。
------解决方案--------------------
这个问题就是在getView重画造成的。
GridView加载一个list的时候,假设这个List有100项,但每个屏幕只能显示12项,当GridView加载一个适配器的时候,适配器在getView加载要显示的Viwe,虽然List有100项,但显示的区域只有12项,所以GridViwe不管绑定多少数据 但它有的View项只有12项,当你滑动屏幕的时候,只是把这12个已有的View的数据更改了而已,所以当你滑动窗口前更改的数据没有改变到list中时,当再次滑回原处就会出现颜色不愿成原来的样子。而LZ所说的偶有偶无 应该就是缓存的问题在在
------解决方案--------------------