码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-08-31 19:41:35      阅读:641      评论:0      收藏:0      [点我收藏+]

标签:android   android listview   列表项背景   

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

</pre><p></p><pre name="code" class="html"><?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>

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

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

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

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

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

按照他的方法,我在监听列表项点击函数写了如下代码:
ListView listView = (ListView) getActivity().findViewById(
				R.id.listmessage);
		listView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {

				AlertDialog.Builder builder = new AlertDialog.Builder(
						getActivity());
				builder.setIcon(R.drawable.ic_launcher);
				builder.setTitle(maps.get(arg2).get("messagetitle").toString());

				MessageToAccount metoacc = TradeAPI.getInstance().queryMessage(
						(String) maps.get(arg2).get("guid"));
				byte[] messagebyte = metoacc.getContext();
				if (messagebyte != null) {
					try {
						new String(messagebyte, "UTF-8");
					} catch (UnsupportedEncodingException e) {
						e.printStackTrace();
					}
				}
				// builder.setMessage(messagecontent);
				builder.setMessage("现货交易中通行的是一手交钱一手交货的交易方式,或者采取以货易货的交易方式。的方式在限期内结算。现货交易与其它交易方式的不同点有:①在交易的目的上,是为了获得商品的所有权。");
				builder.show();
			}
		});</span>

最最关键的莫过于这段代码:
   arg1.setSelected(true);就实现了每次点击之后保持颜色不变。<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">至此效果完成了,贴出我的selector的xml文件:</span></span>
<?xml version="1.0" encoding="utf-8"?>  
<selector  
    xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_selected="true">  
        <shape>  
            <!-- 渐变 -->  
            <gradient  
                android:startColor="#B4B4B4"  
                android:endColor="#B4B4B4"  
                android:type="radial"  
                android:gradientRadius="50" />  
            <!-- 描边 -->  
            <stroke  
                android:width="2dp"  
                android:color="#dcdcdc"  
                android:dashWidth="5dp"   
                android:dashGap="3dp" />  
            <!-- 圆角 -->  
            <corners  
                android:topLeftRadius="5dp"
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp" 
                android:bottomRightRadius="5dp"/>  
            <padding  
                android:left="10dp"  
                android:top="10dp"  
                android:right="10dp"  
                android:bottom="10dp" />  
        </shape>  
    </item>
    
    <item android:state_pressed="true">  
        <shape>  
            <!-- 渐变 -->  
            <gradient  
                android:startColor="#B4B4B4"  
                android:endColor="#B4B4B4"  
                android:type="radial"  
                android:gradientRadius="50" />  
            <!-- 描边 -->  
            <stroke  
                android:width="2dp"  
                android:color="#dcdcdc"  
                android:dashWidth="5dp"   
                android:dashGap="3dp" />  
            <!-- 圆角 -->  
            <corners  
                android:topLeftRadius="5dp"
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp" 
                android:bottomRightRadius="5dp"/>  
            <padding  
                android:left="10dp"  
                android:top="10dp"  
                android:right="10dp"  
                android:bottom="10dp" />  
        </shape>  
    </item>
    
  
    <item>         
        <shape>  
            <solid android:color="#2B2B2B"/>  
            <stroke  
                android:width="2dp"  
                android:color="#2B2B2B" />  
            <corners   
                android:topLeftRadius="5dp"
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp" 
                android:bottomRightRadius="5dp"  
            />  
            <padding  
                android:left="10dp"  
                android:top="10dp"  
                android:right="10dp"  
                android:bottom="10dp" />  
        </shape>  
    </item>  
</selector>  



版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:android   android listview   列表项背景   

原文地址:http://blog.csdn.net/nihaoqiulinhe/article/details/48137645

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!