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

Android Spinner 選中項動態更新 TextView

     編輯:程式設計綜合問答

在 Spinner 的 OnItemSelectedListener 中獲取選中項文本並設置給 TextView,是常見交互需求。關鍵在於正確獲取選中數據。

基本實現

Spinner spinner = findViewById(R.id.spinner);
TextView textView = findViewById(R.id.textView);

ArrayAdapter adapter = ArrayAdapter.createFromResource(
    this, R.array.currencies, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        // 方法一:直接從 parent 獲取
        String selectedText = parent.getItemAtPosition(position).toString();
        textView.setText(selectedText);
        
        // 方法二:從 spinner 獲取(等效)
        // textView.setText(spinner.getSelectedItem().toString());
    }
    
    @Override
    public void onNothingSelected(AdapterView parent) {
        // 可選:清空或設置默認文本
        textView.setText("");
    }
});

進階:自定義適配器時的處理

若使用自定義 Adapter(如包含圖標、多行文本),需從綁定的數據源獲取:

// 假設數據源為 List currencies
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        Currency selected = currencies.get(position);
        textView.setText(selected.getName() + " (" + selected.getCode() + ")");
    }
    // ...
});

常見坑點

  • 初始化時觸發:setAdapter 會觸發一次 onItemSelected(position=0),需區分用戶操作與初始化
  • 空數據:檢查 parent.getCount() > 0 避免越界
  • 重複設置:若文本未變化可跳過 setText 避免閃爍

區分用戶操作與初始化

private boolean isUserSelection = false;

spinner.setOnTouchListener((v, event) -> {
    isUserSelection = true;
    return false;
});

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        if (!isUserSelection) return; // 忽略初始化觸發
        // 處理用戶選擇
        isUserSelection = false;
    }
    // ...
});
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved