最近做的项目要对GridView某个做过修改的Item里面的数据进行保存,如下图所示的GridView和Item。
但我在修改的保存的时候,在保存前面几个数据的时候没有什么问题,但当进度条滑到下面后去修改保存下面Item的数据时。数据就混乱了。比如在底部修改的数据,保存后跑到上面的Item里去了。当换到大屏幕 全部可以一页显示,没有滚动条时 就不会有问题。
于是我就百度了很多GridView的Item数据混乱的解决办法都没有得到解决。后来我就重新审视我的代码,看看有哪一行代码是我以前不怎么用,没怎么深入了解过的,我再百度一下它的具体用法和注意事项,哎呀终于被我找到原因了。
View view1=gvSetting.getChildAt(j);
就是这一行代码呀。
***************************************************************************************************
在ListView中,使用getChildAt(index)的取值,只能是当前可见区域(列表可滚动)的子项!
即取值范围在 >= ListView.getFirstVisiblePosition() && <= ListView.getLastVisiblePosition();1)所以如果想获取前部的将会出现返回Null值空指针问题;
2)getChildCount跟getCount获取的值将会不一样(数量多时);
3 )如果使用了getChildAt(index).findViewById(...)设置值的话,滚动列表时值就会改变了。
需要使用getFirstVisiblePosition()获得第一个可见的位置,再用当前的position-它,再用getChildAt取值!即getChildAt(position - ListView。getFirstVisiblePosition()).findViewById(...)去设置值
2.如果想更新某一行数据,需要配合ListView的滚动状态使用,一般不滚动时才加载更新数据
*************************************************************************
星号里面是我摘抄 此链接 的
把它改成
View view1=gvSetting.getChildAt(j-gvSetting.getFirstVisiblePosition());
就好了