博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
listView 点击后变色 抬起后保持颜色
阅读量:7177 次
发布时间:2019-06-29

本文共 1725 字,大约阅读时间需要 5 分钟。

hot3.png

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

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

[html]   

  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]   

  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]   

  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

你可能感兴趣的文章
WebService-—调用第三方提供的webService服务
查看>>
LVM报错:resize2fs: Bad magic number in super-block
查看>>
从开发到部署会用到的 Docker 命令
查看>>
access数据库转mysql数据库
查看>>
CISCO服务器配置RAID步骤
查看>>
利用makefile文件编译c++源文件
查看>>
VS 0xC0000005 运行错误分析
查看>>
嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】
查看>>
WinHEC上好玩的东西
查看>>
.NET Compact Framework 多线程环境下的UI异步刷新
查看>>
招聘:高级lamp的工程师、高级.net的软件工程师
查看>>
VS 20XX 使用技巧总结
查看>>
PLSQL的DBMS_GETLINE
查看>>
NSubstitute完全手册(九)检查接收到的调用
查看>>
Druid:一个用于大数据实时处理的开源分布式系统
查看>>
网站制作中建议你必须特别注意的问题
查看>>
ASP.NET中TextBox控件设置ReadOnly="true"后台取不到值
查看>>
找出Java进程ID pid的N种方法
查看>>
SSH和SFTP简介
查看>>
借助JRebel使Tomcat支持热部署
查看>>