Android编程心得-ListView的Item高亮显示的办法
来源:互联网 发布:java方法重写 编辑:程序博客网 时间:2024/04/30 19:10
在我们使用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;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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高亮显示的办法
- Android编程心得-ListView的Item高亮显示的办法
- android 取消ListView里的item高亮显示效果
- Android ListView 高亮显示选中的item
- Android ListView item 选中高亮显示
- android listView点击item,高亮显示
- android 改变listview的item宽高和让整个item布局居中显示的方式
- 怎样实现ListView的item显示 高亮显示默认Item
- android listview 显示指定数量的item
- Android listView 设置item显示的数目
- 高亮listView的选中的item
- 最简便实现Android ListView选中item高亮显示
- 选中ListView中的Item后,让Item的背景高亮显示为某张图片的实现
- ListView显示不同的item
- android listView的item 显示多种不同的布局
- android Listview显示不同的item遇到的问题
- scroolView嵌套listview时listView只显示一条item的高,并且还能滑动问题
- ListView或GridView嵌入ScrollView中时,只显示一个Item并且默认将此Item置顶的问题解决办法
- Unity+Kinect SDK
- sublime text 2 快捷键及我喜欢的插件大全
- uva 10827
- c++list运用
- linux下IPTABLES配置详解
- Android编程心得-ListView的Item高亮显示的办法
- LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
- 解决ubuntu下NVIDIA与intel双显卡切换问题
- uestc Another LCIS 区间线段树
- test
- Java中的Enum用法介绍
- uva548(树)
- ocp-047-27(已解决)
- 生病了,坐在电脑前发呆时候胡思乱想