listView中监听冲突问题(以及view里tag的使用)

 

 

最近做了一个小Demo,listView控件中自定义了item项控件,里面添加了Textview,

ImageButton等组件,但问题出现了,ListView控件中的onItemClickListener事件监听不到,经过多次测试之后,发现是由于添加Button按钮的原因,把它改为ImageView之后便没问题,具体原因还不是很清楚,个人感觉是Button把焦点给获取到自己身上了,所以ListView便没了响应。

 

2012.05.29   从网上找到了解决办法, 当我们使用listView嵌套button或者其它clickable控件时会出现listView的onitemClick事件不响应的问题。我们只需要在item的xml文件中的根布局中加上一句:

Java代码
  1. android:descendantFocusability="blocksDescendants"  
android:descendantFocusability="blocksDescendants"


屏蔽item中抢夺focus的控件权限即可解决问题。

 

  <Button 
    	android:id="@+id/dvd_imageBtn_fillDel"
    	android:layout_width="21px"
    	android:layout_height="29px"
		android:background="#FF0000"
		android:layout_alignParentRight="true"
		android:layout_marginTop="10px"
		android:layout_marginRight="10px"
    	/>	

把button改为 ImageView即可

    <ImageView 
    	android:id="@+id/dvd_imageBtn_fillDel"
    	android:layout_width="21px"
    	android:layout_height="29px"
		android:background="#FF0000"
		android:layout_alignParentRight="true"
		android:layout_marginTop="10px"
		android:layout_marginRight="10px"
    	/>	


效果图:

 

 

在做该Demo时,又学到了一个知识点,就是在操作ListView的时候,比如我要删除ListView中的某一项, 前提是我得知道该项在数据集中的索引,

从下面这篇文章链接里得到了启发:

http://www.cnblogs.com/macroxu-1982/archive/2011/06/27/2091552.html     这篇文章主要是讲在使用CursorAdapter的时候,使用view中的
setTag() 和 getTag()来进行传递标识,  经过自己测试后,在ArrayAdapter中的getView()方法中也可以直接使用tag直接为组件(view)赋值,

如下:

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if(convertView == null)
			convertView = LayoutInflater.from(mContext).inflate(mTextViewResourceId, null);
		mImgViewDelFile = (ImageView) convertView.findViewById(R.id.dvd_imageView_fillDel);
		mImgViewDelFile.setOnClickListener(new ClickBtnEvent());
		
		TextView fileName = (TextView) convertView.findViewById(R.id.dvd_play_fillName);
		TextView fileAuthor = (TextView) convertView.findViewById(R.id.dvd_play_fillAuthor);
		fileName.setText(mListFileName[position]);
		fileAuthor.setText(mListFileAuthor[position]);
		
		mImgViewDelFile.setTag(position);//在这里设置删除按钮对应的item项索引
		
		int colorPos = position % colors.length;
		convertView.setBackgroundColor(colors[colorPos]);
		return convertView;
	}


 

而在点击删除按钮(上图红色块)的时候,直接从getTag()中获取即可,详见代码:

	/**按钮点击事件*/
	class ClickBtnEvent implements OnClickListener{
		@Override
		public void onClick(View v) {
			Toast.makeText(mContext, "应该删除该文件:" + v.getTag().toString(), Toast.LENGTH_SHORT).show();
		}
	}

//删除的时候直接操纵v.getTag()所对应的项即可。

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值