实现listView中选择item高亮的功能,最重要的代码就是
adapter.notifyDataSetInvalidated();
通知观察者,此条数据不再有效。
其次需要在实现BaseAdapter的类中添加一个方法,纪录选中的item的id
public void setCurrent(int current)
{
this.current = current;
}
然后就是在getView方法中判断,position的值是否和current的值一样,然后指定你想要呈现的item的背景或颜色。
代码如下:
public class MyBaseAdapter extends Activity implements AdapterView.OnItemClickListener{
private ListView listView;
private Base adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_base_adapter);
listView = (ListView) findViewById(R.id.listView);
List<String> list = new ArrayList<String>();
list.add("孙悟空");
list.add("唐三藏");
list.add("猪八戒");
list.add("沙悟净");
adapter = new Base(list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.setCurrent(position);
adapter.notifyDataSetInvalidated();
}
class Base extends BaseAdapter{
private List<String> data;
private int current;
Base(List<String> data) {
this.data = data;
}
public void setCurrent(int current)
{
this.current = current;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HolderView holderView = null;
if(convertView==null)
{
convertView = getLayoutInflater().inflate(R.layout.baseadapter_item,null);
holderView = new HolderView((ImageView)convertView.findViewById(R.id.image),
(TextView)convertView.findViewById(R.id.text));
convertView.setTag(holderView);
}
holderView = (HolderView) convertView.getTag();
if(current == position)
{
holderView.getImageView().setImageResource(android.R.drawable.ic_delete);
holderView.getTextView().setText(data.get(position));
holderView.getTextView().setTextColor(Color.RED);
}else{
holderView.getImageView().setImageResource(R.drawable.ic_launcher);
holderView.getTextView().setText(data.get(position));
holderView.getTextView().setTextColor(Color.BLACK);
}
return convertView;
}
}
class HolderView{
private ImageView imageView;
private TextView textView;
HolderView(ImageView imageView, TextView textView) {
this.imageView = imageView;
this.textView = textView;
}
public ImageView getImageView() {
return imageView;
}
public TextView getTextView() {
return textView;
}
}
}