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