文档章节

Android listview 不同的项底色不同,点击再变不同颜色

szu_吴鹏
 szu_吴鹏
发布于 2014/04/01 21:17
字数 920
阅读 1194
收藏 7

需求变更,android版本的app需要对listview的不同项设置不同的颜色,并且点击之后,底色再变。

先给一个效果图。

先讲讲业务,listview里面的数据是动态的,而底色图片是从网络上下载下来。当点击了某一个选择项之后,再把这张图片下载下来,更新listview.

怎么从网络下载图片,这个不是我要讲的重点,今天重点讲怎么实现listview设置不同的图片信息,然后点击了某一项数据之后,再把图片更新。

    首先,这里讲讲selecter,大家都知道,直接在drawable下面写一个xml文件,为selecter,代码如下:

<?xml version="1.0" encoding="utf-8" ?>

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

    <item android:state_window_focused="false" android:drawable="@drawable/xinwen" />

    <item android:state_focused="true" android:state_pressed="true"     

        android:drawable="@drawable/xinwen1" /> 

    <item android:state_focused="false" android:state_pressed="true"

        android:drawable="@drawable/xinwen1" />

    <item android:state_selected="true" android:drawable="@drawable/xinwen1" />

    <item android:state_focused="true" android:drawable="@drawable/xinwen1" />

    <item android:drawable="@drawable/xinwen"/> 

</selector>

这里面的各个item项分别是操作listview得到的效果,例如state_selected为真的时候,会显示另外的图片底色。笔者试过,这种方式适合的业务是点击变色的底色为固定的,例如本来是红色的,点击变成绿色,所有的项都是这种效果。

    然后,再说说在Adapter里面添加效果的方法。直接贴代码吧:

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

convertView = LayoutInflater.from(mContext).inflate(

R.layout.mainmenulistitem, null);//获得listview项的布局文件

viewHolder = new ViewHolder();

viewHolder.qunTitle = (TextView) convertView

.findViewById(R.id.leftlistquntitle);

viewHolder.mImageView = (RelativeLayout) convertView

.findViewById(R.id.leftqunimage);

//用viewHolder暂时存着文字信息和项的背景,这里选择相对布局的方式,因为考虑到适配问题。

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

temp =  qunFatherList.get(position);  //数据项,这里的数据为要加载的文字信息

if(!isLeftlistClick)//没有点击的时候,就是第一次加载的时候,都不用变色

setAdapterContent();  

else{

setAdapterClick();//点击了某一项的时候的方法

}

return convertView;

}

private void setAdapterContent() { //把数据和图片set到adapter里面

if(temp.get("Qun_Title").equals("收藏夹")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.shoucang);

}else if(temp.get("Qun_Title").equals("所有栏目")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.suoyoulanmu1);

}else if(temp.get("Qun_Title").equals("摇一摇")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.yaoyiyao);

}else if(temp.get("Qun_Title").equals("兼职就业")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.jianzhijiuye);

}else if(temp.get("Qun_Title").equals("公文通")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.gongwentong);

}else if(temp.get("Qun_Title").equals("校园生活")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xiaoyuanshenghuo);

}else if(temp.get("Qun_Title").equals("学院动态")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xueyuandongtai);

}else if(temp.get("Qun_Title").equals("校园社交")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xiaoyuanshejiao);

}else{

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xinwen);

}

}

点击之后变色要如何变色呢,这里没有想到好的方法,就用了一个比较笨的办法,就是传多一个参数到这个adapter来,然后对这个参数判断,这个参数为点击listview的第几项的值,然后用switch... case 0:{}  case :1{}做操作。

如果传过来的是0,就把列表的第一个图片设成底色图片,其他的设置为原来的图片,如此类推。

switch(p){

case 0 :{

if(temp.get("Qun_Title").equals("收藏夹")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.shoucang1);//设置图片变化。

}else if(temp.get("Qun_Title").equals("所有栏目")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.suoyoulanmu);

}else if(temp.get("Qun_Title").equals("摇一摇")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.yaoyiyao);

}else if(temp.get("Qun_Title").equals("公文通")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.gongwentong);

}

else if(temp.get("Qun_Title").equals("兼职就业")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.jianzhijiuye);

}else if(temp.get("Qun_Title").equals("校园生活")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xiaoyuanshenghuo);

}

else if(temp.get("Qun_Title").equals("学院动态")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xueyuandongtai);

}else if(temp.get("Qun_Title").equals("校园社交")){

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xiaoyuanshejiao);

}else{

viewHolder.qunTitle.setText(temp.get("Qun_Title"));

viewHolder.mImageView.setBackgroundResource(R.drawable.xinwen);

}

break;

}

实现了以上的需求。


© 著作权归作者所有

上一篇: 观察者模式学习
下一篇: Android开发学习
szu_吴鹏
粉丝 9
博文 11
码字总数 6755
作品 0
深圳
程序员
私信 提问
如何Android自定义ListView按下颜色

最近手上有个小项目,项目中用到了ListView,但凡用过ListView的童鞋都知道,在像Android2.3这样使用广泛的安卓版本上,当它被点按的时候会产生黄色的高亮效果,相当恶心,相当难看,而且在不...

dxs123
2014/02/08
0
0
Android自定义ListView按下颜色

最近手上有个小项目,项目中用到了ListView,但凡用过ListView的童鞋都知道,在像Android2.3这样使用广泛的安卓版本上,当它被点按的时候会产生黄色的高亮效果,相当恶心,相当难看,而且在不...

nylqd
2013/06/21
0
3
自定义Android的ListView布局和各Item的背景色

Android中的ListView是用得非常频繁的一种组件,同时ListView也是一种很强大的组件,你可以为每一行自定义布局,也可以修改各行的 背景色。自定义布局比较容易,自己实现一个layout的布局文件...

LiSteven
2013/03/28
0
0
利用9-Patch PNG来实现ListView的圆角显示

说到圆角显示,可能很多人的第一反应就是覆盖onDraw方法来自己画个圆角,可能以前写过其它Windows程序,比如Delphi的人会更有这种冲动吧。 不过在Android中,我们不需要这么麻烦,事实上整个...

鉴客
2011/12/27
1K
0
布局与控件(七)-ListView知多少(上)

版权声明:本文为博主原创文章,禁止转载,违者必究。 https://blog.csdn.net/anddlecn/article/details/51579019 第9节 ListView 在应用界面当中,经常需要使用列表来展示内容。 Android SD...

anddlecn
2016/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux修改时区的正确方法【修改时间,需要修改软连接,靠谱】

CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 [root@centos7 ~]# ll /etc/localtime lrwxrwxrwx 1 root root 33 Oct 12 11:01 /etc/loca......

Airship
26分钟前
0
0
《Netkiller Spring Cloud 手札》之 Master / Slave 主从数据库数据源配置

5.19.1. Master / Slave 主从数据库数据源配置 5.19.1.1. application.properties spring.datasource.master.driverClassName = com.mysql.cj.jdbc.Driverspring.datasource.master.url=j......

netkiller-
30分钟前
36
0
大数据(hadoop-HDFS的本地开发环境的配置与常见的HDFS的JAVA API)

HDFS的本地开发环境搭建 1:所需工具 1)hadoop2.7.3安装包 2)hadoop-eclipse-plugin插件 https://github.com/winghc/hadoop2x-eclipse-plugin 2:搭建过程 1:解压hadoop2.7.3文件2:下载...

这很耳东先生
41分钟前
1
0
TCP协议的定义和丢包时的重传机制

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,...

tantexian
42分钟前
2
0
图解Tomcat类加载机制(阿里面试题)

Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双...

群星纪元
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部