ListView 通过 selector 设置背景色的问题

在Android中,ListView的item要实现点击效果,TextView需要设置setClickable、setFocusable和setFocusableInTouchMode为true。否则,无法通过XML的selector改变选中状态的背景。点击item时,先获取焦点,此时点击事件不生效,需再次点击才响应。如果设置为不可聚焦,点击事件立即响应。onFocusChange会频繁触发,同一view时需特别处理。Selector解析时,会按顺序找到匹配项并立即返回。
摘要由CSDN通过智能技术生成
注意:

TextView必须设置setClickable .. 等三个属性,不然不能Click,也不能获得焦点 

也就无法通过xml文件改变获取焦点状态的背景图了

public View getView(int position, View view, ViewGroup parent) {
view = new TextView(context);
		view.setClickable(true);
		view.setFocusable(true);
		view.setFocusableInTouchMode(true);

 

当单击item的时候 , view 会首先获取焦点。 此时如果对其设置单击事件, 该事件不会生效。 在获取焦点的状态下再次单击才会响应该事件

如果将 ... 设为false

	view.setFocusable(false);
	view.setFocusableInTouchMode(false);


则单击view 立马响应onclick事件

。 因为如果要实现单击事件需要。改为

 

private  View currentView = null;// 当前获取焦点的ListItem
view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				if(v != currentView){
					if(hasFocus){
						Alert.show(context, "正在加载数据"+position);
					}  
				}
				currentView = v;
			}
		});


需要注意的是 onFocusChange 方法会不停的执行, 即状态由 hasFocus == true --> hasFocus ==false

所以当同一个view的时候, 需要进行特殊处理

另外解析selector的时候, 将从上到下依次解析,遇到符合情况的item则立即返回,

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:state_focused="true" 
android:drawable="@drawable/home_item_0_selected" />
	<item android:state_focused="false" 
android:drawable="@drawable/home_item_0" />
</selector>


http://blog.csdn.net/litton_van/article/details/6371868

http://www.devdiv.com/home.php?mod=space&uid=14682&do=blog&id=2851

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值