【问题标题】:Spinners with same ID/How to add rows programmatically具有相同 ID 的微调器/如何以编程方式添加行
【发布时间】:2012-11-14 09:56:45
【问题描述】:

我正在开发的应用程序有问题。我有一个带有起始微调器(选择客户端)和 1 行的屏幕,里面有元素。当我单击加号按钮时,它会添加更多这些行。问题是因为我使用 XML 布局文件添加它们我无法更改 ID(或者我可以吗?)。所以我不能从它们中的每一个中获取值,即使 onItemSelected 适用于客户端微调器,但不适用于其他。我在这里得到了屏幕截图和用于创建第一行/其他行的代码 sn-p。

截图: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);
}

【问题讨论】:

    标签: android dynamic android-spinner android-tablelayout


    【解决方案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 应该是唯一的,因此您应该使用标签。见findViewWithTag

    编辑;如果您不想手动存储对视图的引用,您可以使用父视图的 getChildCount() 方法对其进行迭代;

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

    【讨论】:

    • 这看起来效果很好,我在 ArrayList 和屏幕上都有相同数量的微调器。还有一个问题,如果我不使用 ID(或者我应该使用它们?)我应该如何使用 onItemSelected 侦听器?也可以用标签来完成吗?
    • 我相信在这种情况下你不应该使用 ID。当视图膨胀时,应附加选择侦听器。视图本身应包含选择操作所需的所有信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多