找到与标签匹配的所有微调器

时间:2012-06-01 10:41:54

标签: android spinner android-spinner

是否可以获取列表或查找与特定标记匹配的所有Spinner

我希望用户能够动态添加新的Spinner小部件,但我需要能够动态获取每个Spinner的值。

jQuery中,我可以选择与$('.myClassSelector').each()匹配的所有元素。这个或类似的东西可以在Android中完成吗?

更新 所有微调器都在XML中指定的特定LinearLayout中。布局用作所有微调器的容器。

3 个答案:

答案 0 :(得分:3)

我认为您可以获得之前添加Spinner的布局的所有孩子,并检查孩子是否Spinner

    LinearLayout ll = //Your Layout this can be any Linear or Relative layout 
                     //in which you added your spinners at runtime ;

    int count = ll.getChildCount();
    for(int i =0;i<count;i++)
    {
        View v = ll.getChildAt(i);
        if(v instanceof Spinner)
        {
            // you got the spinner
            Spinner s = (Spinner) v;
            Log.i("Item selected",s.getSelectedItem().toString());
        }
    }

答案 1 :(得分:1)

如果可能的话,最好在相同的线性布局中添加所有微调器并使用FasteKerinns解决方案,但如果不可能尝试下面的东西......

Vector spinners = new Vector ():

private void treverseGroup(ViewGroup vg)
{
    final int count = vg.getChildCount();
    for (int i = 0; i < count; ++i)
    {
        if (vg.getChildAt(i) instanceof Spinner) 
        {

          spinners.add(vg.getChildAt(i));
        }
        else if (vg.getChildAt(i) instanceof ViewGroup)
            recurseGroup((ViewGroup) gp.getChildAt(i));
    }

}

答案 2 :(得分:0)

以下方法可以在root 整个视图层次结构中检索所有Spinners,而无需使用递归。它还匹配给定的标签。

private ArrayList<Spinner> getSpinners(ViewGroup root, Object matchingTag) {
    ArrayList<?> list = root.getTouchables();

    Iterator<?> it = list.iterator();
    while (it.hasNext()) {
        View view = (View) it.next();
        if (!(view instanceof Spinner && view.getTag().equals(matchingTag))) {
            it.remove();
        }
    }

    return (ArrayList<Spinner>) list;
}