自定义Spinner得误区

做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;
			}

		};



猜你喜欢

转载自blog.csdn.net/zhixun2012/article/details/8516050