参考自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方法的重新执行。