本文转自:http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228601.html

在我们使用ListView的时候,经常会遇到某一项(Item)需要高亮显示的情况,如下图,有人说当我们点击子项的时候会变亮,但有时候业务逻辑需要让ITEM根据条件自动变亮,下面我来介绍一下我自己的解决办法

1.首先在layout文件夹对应的xml配置文件定义一个listView控件,这里我不做详细介绍了

    <ListView
android:id="@+id/MeterReadingList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@color/gray"
android:dividerHeight="1dp" >
</ListView>

2.自定义的适配器MyCustomAdapter 用来继承BaseAdapter  ,注意最后的setSelectItem方法是关键

public class MyCustomAdapter extends BaseAdapter {
private LayoutInflater customInflater;
private List<ReadyTask> list;
private int layoutID; public class ViewHolder {
TextView m_order;
TextView m_MeterID;
TextView m_RFID;
TextView m_Area;
TextView m_clientName;
TextView m_clientAddress; } public MyCustomAdapter(LayoutInflater customInflater, List<ReadyTask> list,
int layoutID) {
this.customInflater =customInflater;
this.list = list;
this.layoutID = layoutID; } @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ReadyTask rTask = (ReadyTask)getItem(position); ViewHolder viewHolder = null;
if (convertView == null) {
convertView = customInflater.inflate(layoutID, null);
viewHolder = new ViewHolder();
viewHolder.m_order=(TextView) convertView.findViewById(R.id.m_order);
viewHolder.m_MeterID=(TextView) convertView.findViewById(R.id.m_MeterID);
viewHolder.m_RFID=(TextView) convertView.findViewById(R.id.m_RFID);
viewHolder.m_Area=(TextView) convertView.findViewById(R.id.m_Area);
viewHolder.m_clientName=(TextView) convertView.findViewById(R.id.m_clientName);
viewHolder.m_clientAddress=(TextView) convertView.findViewById(R.id.m_clientAddress); convertView.setTag(viewHolder); } else {
viewHolder = (ViewHolder) convertView.getTag();
// Log.d("MyCustomAdapter", "旧的convertView,position=" + position);
}
if (list!=null&&list.size()>0){ viewHolder.m_order.setText(String.valueOf(position+1));
viewHolder.m_MeterID.setText(PublicConstant.MeterID+rTask.MeterID);
viewHolder.m_RFID.setText(PublicConstant.RFID+rTask.RFID);
viewHolder.m_Area.setText(PublicConstant.Area+rTask.Area);
viewHolder.m_clientName.setText(PublicConstant.ClientName+rTask.ClientName);
viewHolder.m_clientAddress.setText(PublicConstant.ClientAddress+rTask.ClientAddress); }
if (position == selectItem) {
convertView.setBackgroundColor(Color.CYAN);
}
else {
convertView.setBackgroundColor(Color.TRANSPARENT);
} return convertView;
} public void setSelectItem(int selectItem) {
this.selectItem = selectItem;
}
private int selectItem=-1; }

3.在Activity的OnCreate中,对ListView初始化并找到适配器, readyTaskList 为我自定义的List,这里大家可以根据自己的逻辑灵活应用

			ListViewMeterReadinglist=(ListView) findViewById(R.id.MeterReadingList);

			customAdapter = new MyCustomAdapter(this, readyTaskList,
R.layout.listview_item); MeterReadinglist.setAdapter(customAdapter);

4.ListView Item的设置,这里大家也可以灵活设置,只是需要注意与自己适配器类中的控件对应

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="2dp"
android:paddingTop="2dp" > <TextView
android:id="@+id/m_order"
android:layout_width="36sp"
android:layout_height="fill_parent"
android:gravity="center"
android:paddingRight="2dp"
android:textSize="18sp"
android:textStyle="bold" /> <View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/gray" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="7"
android:orientation="vertical"
android:paddingBottom="2dp"
android:paddingTop="2dp" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="1dp"
android:orientation="horizontal" > <TextView
android:id="@+id/m_RFID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="16sp"
android:textStyle="bold" >
</TextView>
<TextView
android:id="@+id/m_MeterID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="16sp"
>
</TextView> </LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="1dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/m_Area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" /> <TextView
android:id="@+id/m_clientName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" /> <TextView
android:id="@+id/m_clientAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2" />
</LinearLayout>
</LinearLayout> <ImageView
android:id="@+id/RightOrWrong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="TODO" />
</LinearLayout> </LinearLayout>

5.最重要的一步来了,就是我们如何调用呢,在Activity符合你条件的地方加上


			customAdapter.setSelectItem(CURRENT_POSITION);
customAdapter.notifyDataSetInvalidated();

我们可以看到setSelectItem是我们第二步自定义适配器里面的方法,用于获得当前的选中的Item项,然后接着调用notifyDataSetInvalidated();就行了,有人可能会发现此处不是用的notifyDataSetChanged(),的确这里我们需要的是对控件改变进行通知,而不是对其中的内容发生改变通知,详细可以了解notifyDataSetInvalidated()与notifyDataSetChanged()的相同不同点。

至次,整个逻辑完成,我们可以灵活控制ListView的某一项高亮显示

[转]Android ListView的Item高亮显示的办法的更多相关文章

  1. Android编程心得-ListView的Item高亮显示的办法

    在我们使用ListView的时候,经常会遇到某一项(Item)需要高亮显示的情况,如下图,有人说当我们点击子项的时候会变亮,但有时候业务逻辑需要让ITEM根据条件自动变亮,下面我来介绍一下我自己的解决 ...

  2. Android ListView的item背景色设置以及item点击无响应等相关问题

    Android ListView的item背景色设置以及item点击无响应等相关问题 在Android开发中,listview控件是非常常用的控件,在大多数情况下,大家都会改掉listview的ite ...

  3. android listview中item通过viewpager实现《IT蓝豹》

    android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...

  4. Android ListView不响应OnItemClickListener解决办法

    有时候,当ListView中的每一个item是自定义的View时,有可能会导致ListView的OnItemClickListener的listener无法调用,请看如下情况: 如果你的自定义List ...

  5. Android listview的item设定高度

    在item的layout文件中,用android:layout_height设置item的高度.运行,高度设置无效. 解决办法: 给item设定minHeight,即可. -------------- ...

  6. Android ListView中Item点击事件失效解决方案

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...

  7. Android ListView的item背景色设置

    1.如何改变item的背景色和按下颜色 listview默认情况下,item的背景色是黑色,在用户点击时是黄色的.如果需要修改为自定义的背景颜色,一般情况下有三种方法: 1)设置listSelecto ...

  8. Android ListView子item高度定长固定值无效问题

    在项目开发中遇到一个实际问题:ListView中,打算给每个子item设定一个具体的高度值如128dp,256dp,在子item中把根布局的高度值写死写成定长,但是不管怎么样,高度一直都没变化.开始以 ...

  9. Android ListView 多样式Item的一个注意点:(

    闲来无事,在写一个多样式Item的ListView的Demo时,遇到了一个以前没遇过的问题; ╮( ̄▽ ̄")╭ 我们知道,ListView里可以有多种样式的item, 实现只需要重写: @O ...

随机推荐

  1. 洛谷 1071 潜伏者(NOIp2009提高组)

    [题意概述] 给出三行字符串,前两行代表密码与明文的对应关系,第三行为待翻译的文本.要求按照对应关系翻译文本. [题解] 直接模拟即可. 注意判断Failed的情况. #include<cstd ...

  2. [模拟赛FJOI Easy Round #2][T3 skill] (最小割+最大权闭合子图(文理分科模型))

    [题目描述] 天上红绯在游戏中扮演敏剑,对于高攻击低防御的职业来说,爆发力显得非常重要,为此,她准备学习n个技能,每个技能都有2个学习方向:物理攻击和魔法攻击.对于第i个技能,如果选择物理攻击方向,会 ...

  3. [转] angular2+highcharts+chart.js

    这里是在ionic2下使用highchairs和chart.js的简单示例chartjs部分参考http://www.jianshu.com/p/bc18132da812 1.安装hightchart ...

  4. 【02】Node.js 安装配置(OK)

    [02] Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. Node.js安装包及源码下载地址为:http://www.nodejs.org/do ...

  5. New Barns

    New Barns 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Farmer John notices that his cows tend to get into argument ...

  6. noip模拟赛 天天和不可描述

    分析:直接就这么翻肯定是不行的,换一种想法:有括号就是把括号里的字符串倒着输出,如果在括号里又遇到了括号就继续倒着输出,相当于递归. 我们可以用递归直接做,也可以用一层循环搞定,每次从左括号跳到右括号 ...

  7. java查询MySQL时,MySQL中tinyint长度为1时转换为boolean

    看到别人代码,MySQL数据库中,有下面这个字段,tinyint(1) 这时候java代码中取出来的数据类型就是boolean类型,如果长度 > 1的话,就会变成int类型,特意查了一下,这里参 ...

  8. Linux下清除DNS缓存

    通常有的时候我们通过域名打不开网页,有可能使DNS缓存的原因(DNS解析的ip地址变了),解决办法如下: 方法一:$nslookup ecafe.pub(这里是你要打开的域名) 方法二:$sudo / ...

  9. 学PHP也要懂得HTML

    简单的HTML制做: html超文本标记语言 HTML文件主体结构: <!DOCTYPE html><html> <!--htlm开始标记 --><head& ...

  10. 美河LINUX 内核学习视频

    Linux内核从原理到代码详解 培训视频 Linux内核源码研读与实战演练 [7.10][美河资料发布小组@aipepsi][linux内核分析视频教程] 炼数成金Linux内核探秘 [11.23][ ...