listView 点击后变色 抬起后保持颜色

经常遇到这样的需求,一个listView 的某一个 item 按下去变色,弹起后 颜色保持,然后按其他的item变色,弹起后保持,与此同时前一个点击的item颜色恢复。实现不难,这里整理一下 :

1 首先是 定义 item的 selector     \drawable\listview_item_pressed.xml

[html] view plain copy print?

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  

  3.     <item  

  4.         android:state_pressed="true"  

  5.         android:drawable="@drawable/listview_item_selected_bg" />  

  6.     <item  

  7.         android:state_pressed="false"  

  8.         android:drawable="@drawable/listview_unseleceted" />  

  9. </selector>  

 

2 把selector 添加入 item ,这里采用的是 添加进 item 采用的布局文件中

[html] view plain copy print?

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  2.     android:layout_width="fill_parent"  

  3.     android:background="@drawable/listview_item_pressed"  

  4.     android:orientation="horizontal"  

  5.     android:layout_height="56dp">...  


3 在 适配器中 getView 方法里 添加 点击事件,也可以在 listView 中的 onItemClick()方法中处理

  

[java] view plain copy print?

  1. convertView.setTag(position);  

  2.    convertView.setOnClickListener(new View.OnClickListener() {  

  3.          

  4.        @Override  

  5.        public void onClick(View v) {  

  6.            // TODO Auto-generated method stub  

  7.            if(oldView == null){  

  8.                //第一次点击   

  9.                oldView = v;  

  10.                v.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.listview_item_selected_bg));  

  11.            }else{  

  12.                //非第一次点击   

  13.                //把上一次点击的 变化  

  14.                oldView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_pressed));                     

  15.            v.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.listview_item_selected_bg));       

  16.                //保存oldView          

  17.              oldView = v;  

  18.            }  

  19.              

  20.        }  

  21.    });  

  22.      

  23.    if(oldView != null && (position == (Integer)oldView.getTag())){// 为点击 item  

  24.        convertView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.listview_item_selected_bg));  

  25.    }else{  

  26.       convertView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_pressed));      

  27.     } 


转载于:https://my.oschina.net/u/2531348/blog/609116

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值