android Gridview position 0 重复加载
来源:互联网 发布:股票选股器软件下载 编辑:程序博客网 时间:2024/05/24 03:22
转载:http://my.oschina.net/u/559701/blog/110945
不知道各位技术屌丝有没有遇到这个问题,反正我是遇到了。而且还导致了第一张有时加载不出来的情况。那必须解决呗。当然也不忘google,baidu了一把,搜到的方案都没解决。也在这里鄙视那些自己连问题都没解决就胡乱转载别人的文章的人。
我先说说我的情况。
public
View getView(
final
int
position, View convertView, ViewGroup parent) {
System.out.println(
"position<span></span>:"
+ posi<span></span>tion);
new
Thread(
new
Runnable() {
@Override
public
void
run() {
//加载position的数据,一般是图片啦。当然图片的加载一般也是异步加载啦
}
});
}
打印出来日志会发现调用顺序是
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
//真正的position 0
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
1
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
2
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
3
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
4
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
如果是倒着向上面刷,日志顺序为
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
6
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
7
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
8
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
3
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
4
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
5
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
//真正的position 0
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
1
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
2
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
02
-
28
11
:
59
:
37.733
: I/System.out(
5669
): position:
0
position 0多次加载。网上很多人也说了这个问题。这是由于gridview不知道它里面到底能放多少item。因此多次加载position 0来适配。的确是这样。
上面不是说我们加载图片是异步的嘛。所以在返回view的时候,是还没加载好图片的。我们往往在异步加载线程中会采用map<int,View>来关联position和控件的关系(异步加载完成后,才回调找到控件来显示图片)。那么多次调用position 0来加载图片的时候,如果加载到position:4后面的0时(或者是倒着回刷的position 2 后面的0时),图片在异步线程中还没加载出来,或还没有回调真正的position 0来显示的话。那么map<int,view>中真正的position 0就会被后面假的position 0覆盖,这样的话,就会导致第一张加载不出来。倒着回刷position 0也同样有这个问题。
问题原因找到了。下面是解决方案,网上有的人说是在getview中使用
parent.getChildCount() == position 则为真正调用,事实上,这样是不行的。
我想到的一个方案是,测试有效:
public
View getView(
final
int
position, View convertView, ViewGroup parent) {
if
(position !=
0
){
//加载该position 的图片
if
(position ==
1
){
//加载该position 0 的图片
}
}
else
{
//将加载的控件等信息保存下来
}
}
- android Gridview position 0 重复加载
- gridview 加载时,position=0被重复加载
- ScrollView嵌套GridView,GridView中position=0时会重复加载很多次
- 由于gridview或者listview position==0时重复加载第一个item的图片加载失败的解决方案
- GridView 数据重复加载
- GridView 中getview方法position 0 加载多次问题
- GridView 中getview方法position 0 加载多次问题
- 解决gridview的Adapter中getview方法,当position==0的时候加载两次
- GridView图片加载重复的正确解决方法
- gridview position =0多次调用getView, 如果有异步加载,那会导致程序效率低,并且导致position=0的控件显示有问题
- Android ListView的getview()中position错位 重复调用(position重复调用)
- Android GridView 异步加载图片
- Android GridView 异步加载图片
- Android GridView 异步加载图片
- Android GridView 异步加载图片
- Android GridView 异步加载图片
- Android GridView 分页加载数据
- Android GridView 异步加载图片
- 调用widgetize url
- ios调用webservice整理
- 图片局部剪切工具
- sap BI webi报表模板:webi报表查询字段 批量查询的EXCEL模板
- 赵雅智_名片夹(6)_仿微信底导航栏
- android Gridview position 0 重复加载
- sitemesh学习2
- 040
- Build a basic responsive site with CSS
- 全局变量和局部变量是否可以重名(笔试题)
- 机房收费系统总结
- AIX patch 的升级和回退
- onerror
- 利用Quartz 2D实现图片的旋转、缩放、裁剪