Android ListView之高亮显示

在ListView的使用过程,Android只提供了单击item显示高亮,却不能保持,本文介绍两种选中保持高亮的方法,仅供参考。先看效果图



方法一:图中list为方法1的实现,其核心思想为setTag(),

myList1.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				if( ( (ListView)parent ).getTag() != null){
					( (View)( ( ListView )parent ).getTag() ).setBackgroundDrawable(null);
				}
				( ( ListView )parent ).setTag(view);
				view.setBackgroundColor(Color.RED);
			}
		});
当点击某个item的时候,先判断parent中是否有tag,如果有,将其背景设为空,然后给view标记tag,设置背景。根据Android源代码可知,该view是被点击的item。

public interface OnItemClickListener {

        /**
         * Callback method to be invoked when an item in this AdapterView has
         * been clicked.
         * <p>
         * Implementers can call getItemAtPosition(position) if they need
         * to access the data associated with the selected item.
         *
         * @param parent The AdapterView where the click happened.
         * @param view The view within the AdapterView that was clicked (this
         *            will be a view provided by the adapter)
         * @param position The position of the view in the adapter.
         * @param id The row id of the item that was clicked.
         */
        void onItemClick(AdapterView<?> parent, View view, int position, long id);
    }

此方法极为简单。

方法二:图中name为方法2的实现,其核心是自定义adapter适配器,其优点是比较灵活。

package com.example.listviewtest;

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {
	private LayoutInflater mInflater;
	private int selectItem	=	-1;
	List<HashMap<String,String>> myList;
	public MyAdapter(Context context,List<HashMap<String,String>> myList){
		this.mInflater = LayoutInflater.from(context);
		this.myList	=	myList;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return myList.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return myList.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public void setSelectItem(int selectItem){
		this.selectItem = selectItem;
	}
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder;
		if(convertView == null){
			holder	=	new ViewHolder();
			convertView	=	mInflater.inflate(R.layout.holder_layout, null);
			holder.textName	=	(TextView)convertView.findViewById(R.id.name);
			convertView.setTag(holder);
		}
		else
			holder = (ViewHolder)convertView.getTag();
		holder.textName.setText(myList.get(position).get("NAME"));
		if(position == selectItem)
			convertView.setBackgroundColor(Color.YELLOW);
		else
			convertView.setBackgroundColor(Color.TRANSPARENT);
		return convertView;
	}
	static class ViewHolder{
		TextView textName;
	}
}

代码中List<>类型可根据实际需求来修改。该段代码的核心部分是getView().也是用setTag方式来实现,这里面一个重要参数为convertView,当某个item在滑动过程中被移除屏幕,Android会回收这个item的view,就是这个convertView,当有item被移出屏幕时,我们会new一个新的view给新显示的item,如果我们能使用convertView,则能节省大量内存开销,

ListViewTest


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值