TShopping

 找回密碼
 註冊
搜索
查看: 4804|回復: 0

[教學] Android下拉式選單 spinner setSelection

[複製鏈接]
發表於 2014-2-22 22:58:59 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
內容說明:建立下拉式選單(Spinner)、Adapter的使用、在XML裡建立陣列常數
資料來源:Google!Android 2手機應用程式設計入門第三版

在「表單元件設計」有說明了按鈕等基本表單物件的建立方式,這篇要介紹的則是下拉式選單。建立下拉式選單,請先在 res/layout/main.xml 裡拉出一個 Spinner 物件。在這裡需要注意的是 Prompt 屬性,在下拉式選單彈出的時候,會以 Prompt 作為提示語,下面的圖例會顯示。Prompt屬性值不可以直接輸入文字,必需要先在value/strings.xml裡建立好,或是在程式裡使用setPrompt()設定。Spinner物件的XML範例如下:
  1. <spinner android:id="@+id/Spinner01"
  2.         android:layout_width="wrap_content"
  3.         android:layout_height="wrap_content"
  4.         android:prompt="@string/spinner_prompt">
  5. </spinner>
複製代碼
想要替下拉式選單加入選項內容,必需要先用陣列產生選項,再傳給Spinner。但是在Android程式裡,陣列是不能夠直接傳值給介面元件的,必需要透過Adapter將陣列值傳給Spinner。這個模式和 ListActivity 的建立方式是類似的,不過在不同的情況下,要選用不同的Adapter。
在程式中宣告陣列並餵給Adapter方法在「ListActivity」有介紹過了,所以這裡就在XML檔裡建立陣列常數。請先開啟res/value/strings.xml檔,並建立字串陣列如下:
  1. <string-array name="items">
  2.             <item>item 1</item>
  3.             <item>item 2</item>
  4.             <item>item 3</item>
  5.             <item>item 4</item>
  6.             <item>item 5</item>
  7.     </string-array>
複製代碼
接著回到主程式中,在onCreate將陣列載入Spinner裡:
  1.                 Spinner spinner_items = (Spinner) findViewById(R.id.Spinner01);
  2.                 //從res/values/string.xml讀取資料到Spinner
  3.                 ArrayAdapter< charsequence> adapter = ArrayAdapter.createFromResource(this,
  4.                                 R.array.items,
  5.                                 android.R.layout.simple_spinner_item);
  6.                 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  7.                 spinner_items.setAdapter(adapter);
複製代碼
請和ListActivity的載入方式做比較。因為是從XML檔載入,所以型別是<CharSequence>(請自行刪除程式中的空白),而且不需要new ArrayAdapter,而是直接呼叫createFromResource()。注意這裡的順序是this, array, layout。simple_spinner_item 和 simple_spinner_dropdown_item 都是系統內建的預設樣式。最後把adapter丟給spinner變數就可以完成選取的動作。
要取得選取值可以使用「getSelectedItem()」或「getSelectedItemPosition()」;設定預設值則使用「setSelection()」。
如果要在使用者選取項目時產生事件,則要先建立Listener(參考表單元件設計)。根據系統產生的Listener方法修改如下:
  1. spinner_items.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

  2.                         @Override
  3.                         public void onItemSelected(AdapterView parent, View v, int position, long id) {
  4.                                 // parent = 事件發生的母體 spinner_items
  5.                                 // position = 被選擇的項目index = parent.getSelectedItemPosition()
  6.                                 // id = row id,通常給資料庫使用

  7.                         }

  8.                         @Override
  9.                         public void onNothingSelected(AdapterView parent) {}
  10.         });
複製代碼

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-4 09:54 , Processed in 0.058979 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表