0

在我的布局中,有许多微调器以这种方式以编程方式生成和添加:

        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);考虑了循环方法。

这是此线程的后续内容:活动中的多个微调器...

此外,我在这里发现了一个非常相似的问题:How to retrieve value of Dynamically added Spinner...,但是当尝试应用链接的答案时,我收到一个错误,说我的 spinner 变量不是最终的(嗯,它不应该是在这种情况下...)。任何提示,伙计们?

4

1 回答 1

1

您可以在数组中保留对每个 Spinner 的引用,并在侦听器循环中通过它并获取每个 Spinner 的值。

@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()
    }
}

最后,您还可以为每个实例实例化不同的侦听器。

于 2013-05-05T17:06:18.127 回答