首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android SpinnerAdapter 正確實現:繼承 BaseAdapter 並實現 SpinnerAdapter 接口

     編輯:程式設計綜合問答

錯誤嘗試

直接實現 `SpinnerAdapter` 接口需實現大量方法(`getDropDownView`、`getItemViewType`、`hasStableIds` 等),易出錯。

正確做法:繼承 BaseAdapter

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")));

關鍵點

  • `BaseAdapter` 已實現 `SpinnerAdapter` 除 `getDropDownView` 外的所有方法。
  • 只需覆寫 `getCount`、`getItem`、`getItemId`、`getView`、`getDropDownView` 五個核心方法。
  • `getView` 對應 Spinner 關閉時顯示的選中項,`getDropDownView` 對應下拉列表項。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved