Android ListView之高亮显示

来源:互联网 发布:国家质检总局网络培训 编辑:程序博客网 时间:2024/06/16 18:51

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



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

myList1.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubif( ( (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;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn myList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn myList.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}public void setSelectItem(int selectItem){this.selectItem = selectItem;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder 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);}elseholder = (ViewHolder)convertView.getTag();holder.textName.setText(myList.get(position).get("NAME"));if(position == selectItem)convertView.setBackgroundColor(Color.YELLOW);elseconvertView.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


0 0
原创粉丝点击