您的位置:首页 > 移动开发 > Android开发

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

2014-04-01 21:17 295 查看
需求变更,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;

}

实现了以上的需求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: