2013-07-09 128 views
1

我希望微調器在用戶選擇一個項目後向我返回一個值。從微調器選擇中獲取值

我知道我可以使用按鈕,然後在OnClick()中使用spinner.getSelectedItemPosition(),但我希望只要用戶在微調器選項中選擇了該值就會返回。因此,我曾想過使用OnItemSelectedListener。

int valueINeed; 
subGoalSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      int index = arg0.getSelectedItemPosition(); 
      //I now want to somehow get the value of the index for use outside of this code block 
} 

我顯然不能使用直return語句作爲該方法具有void返回類型。此外,我不能設置valueINeed = index,除非我進行價值final。我不確定我是否想這樣做,因爲如果用戶改變了他/她的想法會發生什麼,我需要重新分配價值?

謝謝!

+0

如果您沒有立即執行任何操作,在選定事件中設置選定索引的意義何在?微調控制器已經包含了一個您所描述的方法來在您需要時獲取索引。 – chancea

回答

0

TronicZomB的答案是正確的,但你不會被通知的全局變量發生變化時。如果你需要,只要它在Spinner已經改變做一些與valueINeed,你有兩個選擇:

  1. 以使用valueINeed代碼,並把它放在onItemSelected功能
  2. 的所有內部創建一個單獨的功能您從onItemSelected函數中調用。

的#2實施例:

subGoalSpinner.setOnItemSelectedListener(new OnItemSelectedListener() 
{ 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
    { 
     valueINeed = subGoalSpinner.getSelectedItemPosition(); 
     updateView(valueINeed); 
    } 
} 

在這種情況下,updateView是一個函數,在valueINeed取作爲參數,並做了與它(如更新TextView)。

+0

謝謝!這正是我所期待的!我一直試圖想辦法讓onItemSelected接受一個參數...由於某種原因,我從來沒有想過自己製作方法XD 此外,當我想使我的變量全局化時,我是否必須使它成爲'最終的價值是如果我在我聲明'subGoalSpinner.setOnItemSelectedListener('etc? – cshadowstar

+0

,如果你最終決定了你將不能修改它:)之前放置它,只需直接在你的類中聲明它,像'onCreate'的任何方法。只需做一個'int valueINeed;' – crocboy

+0

好的,謝謝! – cshadowstar

1

只需聲明變量int valueINeed;作爲全局變量。比你可以使用以下命令:

subGoalSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, 
      int arg2, long arg3) { 
     valueINeed = subGoalSpinner.getSelectedItemPosition(); 
     //I now want to somehow get the value of the index for use outside of this code block 
} 
+0

謝謝!但是,雖然我已經想到了這一點,但是我發現在全局變量發生變化時我會收到更多通知,因此接受了另一個答案 – cshadowstar