参考自android listview选中某一行,成选中状态颜色高亮显示 对文章中的内容进行了简单的编辑和提取
实现的总体步骤: 1)写Adapter,在Adpater中设置一个标识被选中数据位置的属性,以及一个设置该属性的set方法 2)为ListView写条目监听器(OnItemClickListener),点击时调用适配器中设置选中数据位置的方法,随后调用适配器的notifyDatasetInvalidated方法刷新一下ListView 核心代码如下:
public class MyAdapter extends BaseAdapter{ ... int selectItem;//用来标识被选中数据源的位置 public MyAdapter( Context context,List<String> datas) { ... selectItem = -1;//初始时设置值为-1 } ...//getCount() getItem() getItemId()方法 @Override public View getView(int position, View convertView, ViewGroup parent) { ... //ViewHolder赋值 String s = getItem(position); vh.tv.setText(s); if(position==selectItem){ //如果第position位置的数据为当前点击选中的位置则使用R.drawable.list_underline背景 vh.tv.setBackgroundResource(R.drawable.list_underline); }else{ ///如果第position位置的数据不是当前选中的位置则使用纯白色作为背景 vh.tv.setBackgroundColor(Color.WHITE); } return convertView; } //adapter暴露给外界用来设定用户点击位置的API public void setSelectItem( int position){ this.selectItem = position; } ... //ViewHolder内部类在Activity中为ListView添加条目监听:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.setSelectItem(position); adapter.notifyDataSetInvalidated(); } });在条目监听内部调用适配器的setSelectItem方法,然后刷新ListView引起适配器中getView方法的重新执行。