是否可以获取列表或查找与特定标记匹配的所有Spinner
?
我希望用户能够动态添加新的Spinner
小部件,但我需要能够动态获取每个Spinner
的值。
在jQuery
中,我可以选择与$('.myClassSelector').each()
匹配的所有元素。这个或类似的东西可以在Android中完成吗?
更新
所有微调器都在XML中指定的特定LinearLayout
中。布局用作所有微调器的容器。
答案 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;
}