读取动态生成的微调器的值 - 如何做到这一点?

时间:2013-05-05 16:47:12

标签: java android dynamic spinner listener

在我的布局中,生成并以编程方式添加了许多微调器:

        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 个答案:

答案 0 :(得分:1)

您可以在数组中和侦听器中循环引用每个Spinner,并为每个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()
    }
}

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