直接實現 `SpinnerAdapter` 接口需實現大量方法(`getDropDownView`、`getItemViewType`、`hasStableIds` 等),易出錯。
private class MySpinnerAdapter extends BaseAdapter implements SpinnerAdapter {
private List items;
private LayoutInflater inflater;
public MySpinnerAdapter(Context context, List items) {
this.items = items;
this.inflater = LayoutInflater.from(context);
}
@Override public int getCount() { return items.size(); }
@Override public Object getItem(int position) { return items.get(position); }
@Override public long getItemId(int position) { return position; }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 正常狀態下的項目視圖
TextView tv = (TextView) convertView;
if (tv == null) tv = (TextView) inflater.inflate(android.R.layout.simple_spinner_item, parent, false);
tv.setText(items.get(position));
return tv;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
// 下拉列表項目視圖(可自定義佈局)
TextView tv = (TextView) convertView;
if (tv == null) tv = (TextView) inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
tv.setText(items.get(position));
return tv;
}
// 無需實現 registerDataSetObserver 等,BaseAdapter 已默認實現
}
Spinner spinner = findViewById(R.id.spinner);
spinner.setAdapter(new MySpinnerAdapter(this, Arrays.asList("A", "B", "C")));