2010-05-31 31 views
17

我需要在微調設定值和顯示文本的幫助。 按照我現在通過陣列適配器e.g設定值和顯示文本中的Android微調

mySpinner.setAdapter(myAdapter); 

並儘量這樣做的顯示文本和微調在同一位置的值之後,我所知道的是相同的填充我的微調。我可以從微調獲得的其他屬性是項目上的位置。

現在我的情況下,我想使微調像下拉框,這是我們在.NET。

,其保存的文本和值。

其中當顯示文本和值是在後端。 所以如果我改變下拉框中,我既可以使用其選定的文本或值。 但它並沒有在android spinner的情況下發生。

例如:

文本值
貓10
山5
石9
魚14
河13
腰部17

所以從上述陣列我只顯示非生命物體的文字,我想的是,當用戶選擇他們,我到達那裏的值,即像在山中選擇,我得到5

我希望這例如由我的問題有點更清晰......

thankx

+0

另一個很好的選擇,如果你不能從一個持久化數據源得到它和它的顯示文本的只是一個靜態數組和值是一個枚舉。讓我知道你是否感興趣,我會發佈一個答案。 – 2016-05-17 03:30:28

+0

現在就來看看tho:http://stackoverflow.com/a/372​​66810/293280 – 2016-05-17 03:58:25

回答

11

第1步:爲您的文本和值對

第2步創建一個數據模型:擴展BaseAdapterArrayAdapter環繞你的數據模型,覆蓋getView()返回任何你想要在顯示Spinner本身

第3步:在評選活動中,使用位置找到您的數據模型中相應的對象,查找值

如果你想要在Spinner顯示只是在數據模型中的每個元素的文本表示,可以跳過自定義Adapter - 只需使用ArrayAdapter<YourModelClass>YourModelClass覆蓋toString()返回任何顯示你想要的文字。

+0

在模型中缺少toString(),感謝您的建議! – cking24343 2014-07-01 16:42:16

15

如果你不想去通過創建自己的適配器類,你可以代替你包裹起來的數據在一些已經回國的toString要在微調器顯示的內容。我使用的是類這樣的:

public class TextItemPair<T> { 
    private String text; 
    private T item; 
    public TextItemPair(String text, T item) { 
      this.text = text; 
      this.item = item; 
    } 
    public String getText() { 
     return text; 
    } 
    public T getItem() { 
     return item; 
    } 
    @Override 
    public String toString() { 
     return getText(); 
    } 
} 

當微調變化:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem(); 
} 
+0

只是這是足夠的,如果你有textvalue自定義類@Override public String toString(){ return getText(); } – 2015-01-22 22:14:39