做android开发一段时间后,大家基本上都会不约而同的总结出一条一样的android控件使用心得,数据 ---->adapter------> 控件 ,万年不变的一个流程。典型代表ListView
在做Spinner的时候想传入一个List<AddPerson> 列表当做数据。但是ArrayAdapter并不能直接使用一个类作为数据源,按照以往的习惯自定义一个adapter以后塞入spinner,
结果Spinner的样式和下拉列表的样式是一样这并不能实现我的需求,
从网上查过资料后发现原来spinner里面集成了两个ListVIew,不点击Spinner得时候有一个ListView只显示一行,点击之后,另一个ListView显示全部数据,所以这样
要给Spinner传入两个布局
刚好系统提供的ArrayAdapter有这样的功能
adapter2 = new ArrayAdapter<AddPerson>(this, android.R.layout.simple_spinner_item, android.R.id.text1, sumList) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
AddPerson item = getItem(position);
convertView = inflater.inflate(android.R.layout.simple_spinner_item, null);
TextView textView = (TextView) convertView.findViewById(android.R.id.text1);
if (item != null) {
textView.setText(item.name);
}
}
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
AddPerson item = getItem(position);
if (convertView == null) {
convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, null);
TextView textView = (TextView) convertView.findViewById(android.R.id.text1);
if (item != null) {
textView.setText(getItem(position).name);
}
convertView.setTag(textView);
} else {
((TextView) convertView.getTag()).setText(item.name);
}
return convertView;
}
@Override
public AddPerson getItem(int position) {
if (sumList != null && sumList.size() > 0) {
return sumList.get(position);
}
return null;
}
@Override
public int getCount() {
if (sumList != null && sumList.size() > 0) {
return sumList.size();
}
return 0;
}
};