解决GridView动态设置宽高导致第一个item点击不响应或显示不正常问题

最近做项目的时候遇到了2次这个问题,现在分享一下经验

一、问题

问题代码:

</pre><p><pre name="code" class="java">@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		final ViewHolder holder;
		final Light light = beans.get(position);
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = inflater.inflate(R.layout.lo_light_item, null);
			holder.tvName = (TextView) convertView
					.findViewById(R.id.tv_light_item);
			holder.image = (ImageView) convertView
					.findViewById(R.id.iv_light_item);
			holder.ly = (LinearLayout) convertView
					.findViewById(R.id.ly_light_item);

			convertView.setTag(holder);

		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		<pre name="code" class="java">// 设置单个item宽高
			holder.ly
					.setLayoutParams(new GridView.LayoutParams(
							WindowManager.LayoutParams.FILL_PARENT, gv
									.getHeight() / 4));

return convertView;}




具体症状

1、第一个Item的View显示不全,总是显示一半,其他的Item没有问题,如论怎么设置都没用

2、第一个Item里面设置的点击事件不管用,但是轻轻的滚动一下点击事件立马就生效了。

解决办法:

<pre name="code" class="java">@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		final ViewHolder holder;
		final Light light = beans.get(position);
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = inflater.inflate(R.layout.lo_light_item, null);
			holder.tvName = (TextView) convertView
					.findViewById(R.id.tv_light_item);
			holder.image = (ImageView) convertView
					.findViewById(R.id.iv_light_item);
			holder.ly = (LinearLayout) convertView
					.findViewById(R.id.ly_light_item);

			// 设置单个item宽高
			holder.ly
					.setLayoutParams(new GridView.LayoutParams(
							WindowManager.LayoutParams.FILL_PARENT, gv
									.getHeight() / 4));
			convertView.setTag(holder);

		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		return convertView;
	}

				
时间: 2024-10-23 15:25:41

解决GridView动态设置宽高导致第一个item点击不响应或显示不正常问题的相关文章

【Android疑难杂症】GridView动态设置Item的宽高导致第一个Item不响应或显示不正常的问题

前言 这个问题在之前做一个盒子项目时遇到过,最近又遇到了,使用GridView遇到的非常奇葩的问题,这里记录分享一下. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.问题 1.1 先看问题代码: @Override    public View getView(int position, View convertView, ViewGroup parent) {     

智能窗体实现动态设置宽高

在实际的窗体功能构建中,一个窗体存在多个部件,有时需要将其中一个隐藏,那么问题来了:隐藏了部件但是另一部件就会自动撑开布满整个窗体,如图:      那么我们能不能动态控制窗体的大小尺寸呢?这个肯定是必须能!重要的事情讲三遍:  必须能!必须能! 在我们需要动态控制宽高的时候内加上 保存然后我们再来看看是不是OK?? 原文地址:http://bbs.delit.cn/thread-284-1-1.html 转载请注明出处; 撰写人;度量科技www.delit.cn

不设置宽高,使元素居中的方法

在某些特定的场合,在没有知道宽度的情况下却要求水平居中,今找到些解决方法,现转过来一起学习学习 方案一.利用浮动的包裹性和相对定位百分比数据值特性,传说称之为“相对浮动” .unknow_width_center1 {position:relative; left:50%; float:left;}.unknow_width_center1 li {position:relative; right:50%; z-index:2; float:left}<</span>ul class=&

&lt;canvas&gt;设置宽高遇到的问题

在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小.但是这里设置宽度和高度的时候有一个小问题. 样例代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>canvas绘图</title> </head> <body> <canvas id="drawimg"

行内元素能设置宽高吗

除了行内非替换元素,table-rows,and row groups 其他元素都能设置宽 除了行内非替换元素,table-colums,colum-groups 其他元素都能设置高 行内元素包含行内替换元素(img等)和行内非替换元素(a span等) 行内替换元素是可以设置宽高的,行内非替换元素是不能设置宽高的. 当给行内元素设置 float:left; float:right; 或者 position:absolute; position:fixed; 行内非替换元素也是可以设置宽高的,究

可替换元素—行级元素可以设置宽高?

上篇文章讲的是行级元素与块级元素,明明说了行级元素不可设置width,height属性,而为何img.input等行级元素可以设置宽.高??? 看官莫急,下面我会详细解答. 可替换元素 1. 替换元素就是浏览器根据元素的标签和属性,来决定元素的具体显示内容.例如浏览器会根据<img>标签的src属性的值来读取图片信息并显示出来,而 如果查看(X)HTML代码,则看不到图片的实际内容:又例如根据<input>标签的type属性来决定是显示输入框,还是单选按钮等. 2. 他们区别一般i

里面的div没有设置宽高,用padding设置的50px来撑开宽高,这个时候就需要用position:absolute或者relative来让文本去掉继承的外层的整宽度

1. <!DOCTYPE html><html><head><style>*{margin:0px;padding:0px;}#div1{position: relative;height: 200px;width: 200px;margin: 100px;padding:10px;border: 1px solid black;} #div2{padding:50px;position: absolute;border: 1px solid black;b

Android ListView的item点击无响应的解决方法

如果listitem里面包括button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最常用的解决办法 是在listitem的布局文件中设置descendantFocusability属性. item的布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.andro

Android GridView 第一个Item 点击没反应

@Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; final String path = list.get(position); if (convertView == null) { convertView = mInflater.inflate(R.layout.grid_child_item, null); v