ListView的固定选中效果

来源:互联网 发布:建立js首先应该怎么做 编辑:程序博客网 时间:2024/05/17 02:31

项目中需要用到ListView的高亮选中,并且保持选中状态的功能。 走了不少弯路,总结一下。


展示一下ListView的选中需求, 选中,保持高亮。



需要注意几点:

1. adapter中的item所在的layout,不能设置背景,否则无法选中

2. item所在的UI中,不能出现抢占焦点的UI, 不然无法选中,如果存在,则需要去掉其focus相关的属性



                <EditText                    android:id="@+id/order_number_history"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:layout_marginLeft="10dp"                    android:layout_marginRight="10dp"                    android:layout_marginTop="5dp"                    android:enabled="true"                    android:gravity="center"                    android:inputType="number"                    android:focusableInTouchMode="false"  这里                    android:focusable="false"   这里                    android:textColor="#000000" />



关键代码(根据选中的position,将背景颜色修改即可):

@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLog.i("======", position + "");ViewHolder mHolder = null;if (convertView == null) {convertView = mInflater.inflate(R.layout.gv_orderhistory_item, null);mHolder = new ViewHolder();convertView.setTag(mHolder);mHolder.tv_foodname_history = (TextView) convertView.findViewById(R.id.tv_foodname_history);} else {mHolder=(ViewHolder) convertView.getTag();}String  or = list.get(position);mHolder.tv_foodname_history.setText(or);mHolder.index = position;updateView(convertView);return convertView;}private void updateView(View convertView){ViewHolder mHolder = (ViewHolder) convertView.getTag();int tagIdx = mHolder.index;if (tagIdx != currentSelIdx){convertView.setBackgroundResource(R.drawable.historyorder_lv_item_normal);}else{convertView.setBackgroundResource(R.drawable.historyorder_lv_item_selected);}}private static class ViewHolder {TextView tv_foodname_history; //菜名int index;}

下载地址


0 0
原创粉丝点击