2012-11-14 23 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

非常感谢!解决了一切! –

相关问题