2012-11-14 65 views
2

我遇到了正在開發的應用程序的問題。我有一個初始微調屏幕(選擇客戶端)和1行內部元素。當我點擊加號按鈕時,它會添加更多的這些行。問題是因爲我將它們添加到XML佈局文件中,我無法更改ID(或者我可以嗎?)。所以我不能從他們每個人的價值觀,即使onItemSelected作品的客戶微調,但不爲其他人。我在這裏獲得了屏幕截圖以及用於創建第一行/其他行的代碼片段。具有相同ID的紡紗機/如何以編程方式添加行

截圖:http://dl.dropbox.com/u/9667835/Screenshot_2012-11-14-10-44-38.png

private void startRow() 
{ 
    ArrayAdapter<String> adapterUnits = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item); 
    for(int i=0; i<units_arr.size(); i++) 
     adapterUnits.add(units_arr.get(i).get("name").toString()); 
    ArrayAdapter<String> adapterVats = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item); 
    for(int i=0; i<vats_arr.size(); i++) 
     adapterVats.add(vats_arr.get(i).get("value").toString()); 

    tl = (TableLayout) findViewById(R.id.add_invoice_layout); 
    LayoutInflater inflater = LayoutInflater.from(this); 
    View item = inflater.inflate(R.layout.add_invoice_row, tl, false); 

    Spinner units = (Spinner) item.findViewById(R.id.spinnerUnit); 
    Spinner vats = (Spinner) item.findViewById(R.id.spinnerVAT); 
    units.setAdapter(adapterUnits); 
    vats.setAdapter(adapterVats); 
    tl.addView(item); 
} 

回答

1

保持一個參照各充氣視圖,然後迭代時處理完成輸入數據的那些;

// View references, as a class property 
private ArrayList<View> viewRef = new ArrayList<View>(); 

View item = inflater.inflate ... 
this.viewRef.add(item); 

現在,當要處理數據時,您應該這樣做;

for (View item : this.viewRef) 

ID's應該是唯一的,所以你應該使用標籤。見findViewWithTag

編輯;如果您不想手動存儲對視圖的引用,則可以使用父視圖的getChildCount()方法迭代它們;

for (int i = 0; i < parent.getChildCount(); i++) 
{ 
    View item = (View) parent.getChildAt(i); 
} 
+1

看來這工作得很好,我有相同數量的ArrayList和屏幕上的spinners。還有一個問題,如果我不使用ID(或者我應該使用它們?)我應該如何使用onItemSelected偵聽器?那也可以用標籤來完成嗎? –

+1

在這種情況下,你不應該使用ID,我相信。當視圖膨脹時,應該連接選擇監聽器。視圖本身應包含選擇操作所需的全部信息。 – Daniel

+1

非常感謝!解決了一切! –

相關問題