自定义Spinner得误区

来源:互联网 发布:money pro mac 编辑:程序博客网 时间:2024/06/05 23:01

做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) {@Overridepublic 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;}@Overridepublic 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;}@Overridepublic AddPerson getItem(int position) {if (sumList != null && sumList.size() > 0) {return sumList.get(position);}return null;}@Overridepublic int getCount() {if (sumList != null && sumList.size() > 0) {return sumList.size();}return 0;}};



原创粉丝点击