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

Android Spinner 顯示指定資料模型值:使用 Adapter getPosition 設定選中項

     編輯:程式設計綜合問答

問題現象

編輯畫面需根據 myAccount.accountType 顯示對應的 Spinner 項目,而非預設第一項。

標準解法


// 1. 將 enum 轉為顯示字串
String displayString;
switch (myAccount.accountType) {
    case AccountType.kAccountTypeIncome: displayString = "Income"; break;
    case AccountType.kAccountTypeAsset: displayString = "Asset"; break;
    case AccountType.kAccountTypeAssetCash: displayString = "Cash"; break;
    case AccountType.kAccountTypeAssetBank: displayString = "Bank"; break;
    case AccountType.kAccountTypeLiability: displayString = "Liability"; break;
    default: displayString = "Other";
}

// 2. 從 Adapter 取得位置並設定
int position = typeOfAccountAdapter.getPosition(displayString);
typeOfAccount.setSelection(position);

關鍵點

  • ArrayAdapter.getPosition(item):回傳項目在 Adapter 中的索引,找不到回傳 -1。
  • Spinner.setSelection(position):程式化設定選中項,會觸發 OnItemSelectedListener。
  • 字串比對必須完全一致(含大小寫、空白),建議從同一資源陣列/常數取得顯示字串。

進階:資料綁定模式(避免硬編碼字串)


// 定義資料模型
enum AccountType { Income, Asset, Cash, Bank, Liability, Other }

// Spinner 資料來源
List types = Arrays.asList(AccountType.values());

// 自定義 Adapter 顯示名稱
ArrayAdapter adapter = new ArrayAdapter(this, 
    android.R.layout.simple_spinner_item, types) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView) super.getView(position, convertView, parent);
        view.setText(getDisplayName(types.get(position)));
        return view;
    }
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getView(position, convertView, parent);
    }
};

// 直接設定 enum 值
spinner.setSelection(types.indexOf(myAccount.accountType));

優勢:型別安全、重構友善、顯示邏輯集中、國際化容易。

常見誤區

  • 在 onItemSelected 中設定 setSelection:會觸發無限遞迴,需加旗標防護。
  • 使用 adapter.getItem(position) 比對:需轉型且效率低,getPosition 直接用 equals 比對。
  • 忽略 -1 回傳值:若模型值不在下拉選單中,需預設處理。

掌握 Adapter.getPosition() + Spinner.setSelection() 模式,是 Spinner 資料驅動顯示的標準做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved