Imageview 的selector失效一般有一下几个原因:
1.imageView的clickable没有设置成true。默认的clickable是false。但是在实际应用中,会出现一个问题,就是在ListView或者GridView或其他可以把imageView作为一个Item的容器中,如果把当前容器的item的imageView的clickable属性设置成true那么该item的OnClick事件会被拦截掉。我采取的解决方案是在容器的OnItemClickListener中执行以下操作:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//获取当前View的holder,获取到当前Item中的imageView的引用
MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder)view.getTag();
//把imageVeiw的clickable设置成true
holder.imageView.setClickable(true);
boolean isSelected = holder.imageView.isSelected();
//imageView的selected状态取反,修改imageView的selected状态,等于切换图片操作
holder.imageView.setSelected( isSelected ? false : true);
//把imageView的clickable设置成false,以保证父容器的OntiemClickListener能响应后续的点击操作
holder.imageView.setClickable(false)
};
2.imageView要能使用selector还有一个必须要注意的是,设置selector必须是background不能是src。
3.还有些人说selector文件中默认的显示图片应该写在下面,比如
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/icon_airbox_checked"
android:state_selected="true"></item>
<item android:drawable="@drawable/icon_airbox_unchecked"></item>
</selector>、
但在实际开发中发现,这个顺序对结果没有什么影响。