欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android GridView控件第一个item不响应或显示不正常或事件诡异

程序员文章站 2022-03-01 12:53:14
...

在使用Android的GridView控件时、很多人都会碰到这么个奇怪的问题:整个GridView中、所有item的响应都没问题、只有第一个item不响应、或是显示不正常、或是点完第一个item后不响应但再点其他的item后其他item会响应、同时第一个item也响应了(超诡异的现象……)


至少就我所看到的、出现第一个item有问题的情况、一般都有使用BaseAdapter、而出问题的地方一般都是getView的书写有问题、稍微整理归纳一下可能的解决方法、供大家参考:

检查getView方法中是否有动态设置LayoutParams的操作、如果有、那么注意不能new 一个新的LayoutParams、而应该调用getLayoutParams获取已有的LayoutParams


如果getLayoutParams返回为空或是返回的LayoutParams不是AbsListView.LayoutParams、那就在getView之前用setLayoutParams方法设置一下、listener响应有问题:尝试使用GridView的onItemClickListener、如果是onItemClickListener响应有问题、检查setOnItemClickListener是否在setAdapter之后


尽量不要采用给每个item的View加onClickListener的方式、如果必须使用该方式、并且采用了ViewHolder的写法复用View、那么需要注意加onClickListener的位置、是加在convertVew==null的地方还是外面我就记不清了、我没试过、只看到有一个帖子说过这个


如果还有问题、我看到的可能的解决方法有(没试过、不确定是否可行、但有人在相关帖子里提到的各种方法)


(1)不用ViewHolder写法、每次getView都重新创建新的View


(2)GriView设置背景色为透明


但就我感觉、想要动态设置GridView的item宽、高、但直接new LayoutParams导致出问题的出现次数比较多、大家注意一下、具体为啥会这样就没细究了、有兴趣的童鞋欢迎讨论一下


如果实在解决不了的话、就不要用GridView了、直接使用LinearLayout替换GridView、自己写一个双重循环去排列和行、然后使用addView添加到LinearLayout里面、虽然会有麻烦、但也是一种办法