ListView的固定选中效果

项目中需要用到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,将背景颜色修改即可):

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		Log.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;
	}

下载地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值