2013-05-05 23 views
0

在我的佈局有一個數字產生和編程方式添加這種方式紡紗:讀取動態生成的spinners的值 - 如何做到這一點?

 for (int i = 0; i < spinnerCount; i++) { 

     spinner = new Spinner(this); 
     spinner.setId(i); 
     spinner.setAdapter(new MyAdapter(SpinnerLayout.this, R.layout.row, strings)); 
     spinner.setOnItemSelectedListener(this); 
     spinnerContainer.addView(spinner); 
    } 

一切似乎做工精細,直到我想每個微調的值。偵聽器只返回最後一個微調器的值。如何讓它讀取每個微調器的價值?最後,我想具有存儲在預定的陣列的所有值(因此,環狀方法spinnerValues.set(int position, int spinnerVal);考慮

這是該線程的後續:Multiple spinners in an activity...

而且,我在這裏發現了一個非常類似的問題:How to retrieve value of Dynamically added Spinner...,但是當試圖應用鏈接的答案時,我得到一個錯誤,說我的微調變量不是最終的(好吧,它不應該在這種情況下......)任何提示,夥計們?

+1

如果你不能讓你的微調最終你可以使它全局..因此它可以被訪問到一個內部類。 – bakriOnFire 2013-05-05 16:55:51

+0

感謝您的評論@ bakriOnFire。如果我沒有決定用數組方法解決這個問題,我會以這種方式移動(儘管它做了第一步)。但無論如何,我會爲未來保留這一建議。 – AbreQueVoy 2013-05-05 18:49:40

回答

1

您可以保留對數組中每個微調控件的引用,並在偵聽器循環中通過它並獲取每個微控制器的值。

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){ 
for(Spinner s : spinners){ 
    // s.getSelectedItem() 
} 
} 

您還可以通過比較ID來檢查哪一個已被更改。

parent.getId() == s.getId() 

否則,你可以看通過在所有的ViewGroup紡紗:

int count = spinnerContainer.getChildCount(); 
for(int i =0;i<count;i++) 
{ 
    View v = spinnerContainer.getChildAt(i); 
    if(v instanceof Spinner) 
    { 
     ((Spinner)v).getSelectedItem() 
    } 
} 

最後你也可以實例化不同聽衆的每一個。

+0

選擇第一種方法,它工作。謝謝! – AbreQueVoy 2013-05-05 18:50:39

+0

不客氣! – Wizche 2013-05-06 07:01:54