GridView 自定义Item大小的时候第一个Item显示不正常的解决办法

项目中在GridView的使用过程中遇到不少问题,在此记录一下,给自己提个醒:

Gridview第一个item不显示的问题。

在GridView中,我们在getView中可以映射每个item的布局,通过inflate的方式。这里参考一下大神的分析,具体在这里有详细的描述三种不同inflate方法的描述:

http://blog.csdn.NET/lmj623565791/article/details/38171465。

在此建议使用第二种构造函数来构建inflate,至于为什么,第一种inflate(layoutId, null )是无法获取到布局文件的,那就无法通过getLayoutParams()和setLayoutParams()方法来进行单个item大小设置的。

有的朋友会问,可以用new GridViewLayoutParams()来操作,我对这个理解还不是很明白,但是我发现new出来的东西会出现莫名其妙的问题,所以个人自己建议是通过get和set方法来操作。

第一个item不显示,主要是我们在getView中通过get和set方法进行了动态的item大小控制,那么在这里我们的控制代码应该怎么放置呢?

[html]  view plain  copy
  1. @Override  
  2.     public View getView(int position, View convertView, ViewGroup parent) {  
  3.         // TODO Auto-generated method stub  
  4.         Log.i("CustomGridViewAdapter", "getView be called");  
  5.         ViewHold holder;  
  6.         if (convertView == null || convertView.getTag() == null) {  
  7.             convertView = mInflater.inflate(R.layout.image_text_button, parent,false);  
  8.             holder = new ViewHold();  
  9.             IniInflaterView(holder, convertView);  
  10.               
  11.             convertView.setTag(holder);  
  12.         } else {  
  13.             holder = (ViewHold) convertView.getTag();  
  14.         }  
  15.         <pre name="code" class="html">int mwidth = mPullToRefreshGridView.getWidth() / 7;  
  16.         // Log.e("item宽度", mwidth + "");  
  17.         LayoutParams lp = (LayoutParams) convertView.getLayoutParams();  
  18.         lp.height = mwidth * 14 / 9;  
  19.         lp.width = mwidth;  
  20.         convertView.setLayoutParams(lp);  

最最最重要的重点就是 

不要在getView中使用new LayoutParams(),在构造方法中先定义出来也不行。。

要通过 getLayoutParams()方法获得已有的LayoutParams 

重设height 和 width ,然后使用



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值