Android使用selector点击listview改变背景颜色

点击之后背景颜色不变,我做的是松开手之后背景颜色没有固定,再点击其他item时候点击的item颜色改变,其他还是原来颜色

 Android中的Selector主要是用来改变ListView和Button控件的默认背景

 one template:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_pressed="true"
           android:drawable="@drawable/ic_mymenu_pressed" /> <!-- pressed -->
     <item android:state_focused="true"
           android:drawable="@drawable/ic_mymenu_pressed" /> <!-- focused -->
     <item android:drawable="@drawable/ic_mymenu" /> <!-- default -->  
</selector>
复制代码


复制代码
<?xml version="1.0" encoding="utf-8" ?>     
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
<!-- 默认时的背景图片-->    
  <item android:drawable="@drawable/pic1" />      
<!-- 没有焦点时的背景图片 -->    
  <item android:state_window_focused="false"     
        android:drawable="@drawable/pic1" />     
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->    
  <item android:state_focused="true" android:state_pressed="true"   android:drawable= "@drawable/pic2" />   
<!-- 触摸模式下单击时的背景图片-->    
<item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />    
<!--选中时的图片背景-->    
  <item android:state_selected="true"   android:drawable="@drawable/pic4" />     
<!--获得焦点时的图片背景-->    
  <item android:state_focused="true"   android:drawable="@drawable/pic5" />     
</selector>
复制代码
ListView设置点击背景效果,有三种方法可以来引用刚才创建的selector文件:

(1)在ListView中添加如下属性代码
android:listSelector="@drawable/mylist_view"

(2)在ListView的item界面中添加如下属性代码
android:background="@drawable/mylist_view"

(3)利用JAVA代码直接编写
Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);
listView.setSelector(drawable);

为了防止列表拉黑的情况发生,需要在ListView中添加以下的属性代码
android:cacheColorHint="@android:color/transparent"
or 
android:cacheColorHint="#00000000"

or

listView.setCacheColorHint(0); 



属性介绍:

android:state_selected 选中

android:state_focused 获得焦点

android:state_pressed 点击

android:state_enabled 设置是否响应事件,指所有事件
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
            mSelectedItem = position;
            mAdapter.notifyDataSetChanged();
    }
};

        @Override
public View getView(int position, View convertView, ViewGroup parent) {
    final View view = View.inflate(context, R.layout.item_list, null);

    if (position == mSelectedItem) {
        // 颜色设置
    }

    return view;
}

想在drawable中使用item的selector,不是呀这样代码设置,您还有其他办法吗,我使用的selector只有按下才变色,松开又变成原来的了,不知道怎么回事儿




一:
加一个标志是否选中:is_selected true / flase
要有两个selector ,一个说选中的,另外一个说没有选中的
然后再getview里面做通过is_selected标志来做判断,设置选中的selector还是没有选中的selector就可以了
if (position == mSelectedItem && is_selected) {
// 设置选中的selector
}else{
// 设置未选中的selector
}
记得点击事件要调研noticefy更新一下

 holder.itemview.setOnTouchListener(new OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_UP:{
                        holder.itemview.setSelected(false);
                        break;
                    }case MotionEvent.ACTION_DOWN:{
                        holder.itemview.setSelected(true);
                        break;
                    }case MotionEvent.ACTION_CANCEL:{
                        holder.itemview.setSelected(false);
                    }
                }
                return false;
            }

});

这样就行了,ACTION_CANCEL是处理没有抬起,移动到控件外的情况。