Android GridView 问题

      今天在项目中用GridView进行图片的展示,遇到的一个问题。

问题如下:

  做一个类似微信朋友圈状态发布的界面,设置最多选择2张图片,在GridView的adapter的getView中判断position,小于2则下一个图片显示添加图片的加号,等于2将加号隐藏,设置holder.image.setVisibility(View.GONE);点击加号进入拍照或相册进行图片选择,在发布界面的onRestart()中刷新列表adapter.notifyDataSetChanged();开始测试界面效果,选择两张照片,进入发布界面,GridView中两张照片显示正常,点击一张图片进入预览界面,将其删除,再返回主界面,GridView中一张图片显示正常,并且下一个位置显示添加图片的加号图片也正常,这时候重新开一个界面或者按下Home键使之失去焦点,在回到主界面,问题出现了,原本显示完好的GridView消失了。怎么刷也出不来。

      经过查找,确定了问题所在,但是对于GridView的工作原理不是很了解,所以也解释不清楚。

      猜测应该是主界面重新获得焦点后无法获取GridView高度导致其他控件将其挤压至无法显示。

      导致问题出现的两行代码如下:

            1、adapter的getView方法中:holder.image.setVisibility(View.GONE);(这句话删掉也是可以解决问题的,不过这样在图片达到最大数量后下一个Item中依然可以显示添加图片的加号button,显然不科学)

            2、GridView布局界面中:android:layout_height="wrap_content"

 

      解决方法:

            将GridView高度设为固定值,目前还没找到更好的方法。

 

  PS:终于找到了问题的所在,原来是View.GONE在作怪,改为View.INVISIBLE即可,GONE和INVISIBLE的区别参见后续的文章。

posted @ 2014-05-28 15:10  x-dev  阅读(946)  评论(0编辑  收藏  举报