首页 > 移动开发 > Android ListView 列表项点击之后,保持背景颜色

Android ListView 列表项点击之后,保持背景颜色

   项目中突然遇到这样的问题,一些消息类的界面,需要使用listview进行显示,正常的需求是刚开始进入消息显示界面的时候,列表项显示的都是全黑的,接着点击了某一个列表项之后,就要更换成白色,并且保持白色的显示,剩下的仍旧为黑色的,一开始就有点走进了死胡同,使用selector结合shape来定义选中、未选中、点击或者点击之后的背景显示,实例如下:

[plain]

  1. </pre><p></p><pre name="code" class="html"><?xml version="1.0" encoding="utf-8" ?>       
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">     
  3. <!-- 默认时的背景图片-->      
  4.   <item android:drawable="@drawable/pic1" />        
  5. <!-- 没有焦点时的背景图片 -->      
  6.   <item android:state_window_focused="false"       
  7.         android:drawable="@drawable/pic1" />       
  8. <!-- 非触摸模式下获得焦点并单击时的背景图片 -->      
  9.   <item android:state_focused="true" android:state_pressed="true"   android:drawable= "@drawable/pic2" />     
  10. <!-- 触摸模式下单击时的背景图片-->      
  11. <item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />      
  12. <!--选中时的图片背景-->      
  13.   <item android:state_selected="true"   android:drawable="@drawable/pic4" />       
  14. <!--获得焦点时的图片背景-->      
  15.   <item android:state_focused="true"   android:drawable="@drawable/pic5" />       
  16. </selector>  


上述的代码是由很多前辈提供的,的确是能实现点击之后改变颜色,但问题来了,点击之后松开手指,就会显示成默认的背景颜色,无法保持背景颜色,感谢csdn的那些前辈对于这个问题的分析,贴出如下:

1.selector写法是在item处于selected状态时变成灰色但是ListView默认点击item再松开就恢复到默认,并不是像TabWidget一样处于selected状态

2.listview item的点击,不是点击一次就变为选中状态的未被点击:初始状态点击:按下状态点击后松开:初始状态

这也就解释了,我现在无法通过selector来完成点击之后保持颜色,不过另一位高手提出了这样的解决方案

其实你在ListView的OnItemClickListener里边,将当前选中的item执行setSelected(true)就好了

按照他的方法,我在监听列表项点击函数写了如下代码:
[java]

  1. ListView listView = (ListView) getActivity().findViewById(  
  2.                 R.id.listmessage);  
  3.         listView.setOnItemClickListener(new OnItemClickListener() {  
  4.             @Override  
  5.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  6.                     long arg3) {  
  7.   
  8.                 AlertDialog.Builder builder = new AlertDialog.Builder(  
  9.                         getActivity());  
  10.                 builder.setIcon(R.drawable.ic_launcher);  
  11.                 builder.setTitle(maps.get(arg2).get("messagetitle").toString());  
  12.   
  13.                 MessageToAccount metoacc = TradeAPI.getInstance().queryMessage(  
  14.                         (String) maps.get(arg2).get("guid"));  
  15.                 byte[] messagebyte = metoacc.getContext();  
  16.                 if (messagebyte != null) {  
  17.                     try {  
  18.                         new String(messagebyte, "UTF-8");  
  19.                     } catch (UnsupportedEncodingException e) {  
  20.                         e.printStackTrace();  
  21.                     }  
  22.                 }  
  23.                 // builder.setMessage(messagecontent);  
  24.                 builder.setMessage("现货交易中通行的是一手交钱一手交货的交易方式,或者采取以货易货的交易方式。的方式在限期内结算。现货交易与其它交易方式的不同点有:①在交易的目的上,是为了获得商品的所有权。");  
  25.                 builder.show();  
  26.             }  
  27.         });</span>  


最最关键的莫过于这段代码:

  1. arg1.setSelected(true);就实现了每次点击之后保持颜色不变。<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">至此效果完成了,贴出我的selector的xml文件:</span></span>  
[java]

  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <selector    
  3.     xmlns:android="http://schemas.android.com/apk/res/android">    
  4.     <item android:state_selected="true">    
  5.         <shape>    
  6.             <!-- 渐变 -->    
  7.             <gradient    
  8.                 android:startColor="#B4B4B4"    
  9.                 android:endColor="#B4B4B4"    
  10.                 android:type="radial"    
  11.                 android:gradientRadius="50" />    
  12.             <!-- 描边 -->    
  13.             <stroke    
  14.                 android:width="2dp"    
  15.                 android:color="#dcdcdc"    
  16.                 android:dashWidth="5dp"     
  17.                 android:dashGap="3dp" />    
  18.             <!-- 圆角 -->    
  19.             <corners    
  20.                 android:topLeftRadius="5dp"  
  21.                 android:topRightRadius="5dp"  
  22.                 android:bottomLeftRadius="5dp"   
  23.                 android:bottomRightRadius="5dp"/>    
  24.             <padding    
  25.                 android:left="10dp"    
  26.                 android:top="10dp"    
  27.                 android:right="10dp"    
  28.                 android:bottom="10dp" />    
  29.         </shape>    
  30.     </item>  
  31.       
  32.     <item android:state_pressed="true">    
  33.         <shape>    
  34.             <!-- 渐变 -->    
  35.             <gradient    
  36.                 android:startColor="#B4B4B4"    
  37.                 android:endColor="#B4B4B4"    
  38.                 android:type="radial"    
  39.                 android:gradientRadius="50" />    
  40.             <!-- 描边 -->    
  41.             <stroke    
  42.                 android:width="2dp"    
  43.                 android:color="#dcdcdc"    
  44.                 android:dashWidth="5dp"     
  45.                 android:dashGap="3dp" />    
  46.             <!-- 圆角 -->    
  47.             <corners    
  48.                 android:topLeftRadius="5dp"  
  49.                 android:topRightRadius="5dp"  
  50.                 android:bottomLeftRadius="5dp"   
  51.                 android:bottomRightRadius="5dp"/>    
  52.             <padding    
  53.                 android:left="10dp"    
  54.                 android:top="10dp"    
  55.                 android:right="10dp"    
  56.                 android:bottom="10dp" />    
  57.         </shape>    
  58.     </item>  
  59.       
  60.     
  61.     <item>           
  62.         <shape>    
  63.             <solid android:color="#2B2B2B"/>    
  64.             <stroke    
  65.                 android:width="2dp"    
  66.                 android:color="#2B2B2B" />    
  67.             <corners     
  68.                 android:topLeftRadius="5dp"  
  69.                 android:topRightRadius="5dp"  
  70.                 android:bottomLeftRadius="5dp"   
  71.                 android:bottomRightRadius="5dp"    
  72.             />    
  73.             <padding    
  74.                 android:left="10dp"    
  75.                 android:top="10dp"    
  76.                 android:right="10dp"    
  77.                 android:bottom="10dp" />    
  78.         </shape>    
  79.     </item>    
  80. </selector>    

本文固定链接: http://www.devba.com/index.php/archives/6342.html | 开发吧

报歉!评论已关闭.