在android中不使用findViewById()查找所有微调器视图

时间:2014-06-05 09:21:36

标签: android xml android-spinner

我的xml中有超过100个微调器。有没有办法找到所有微调器而不使用findViewById()到所有100个微调器?它很乏味,我不是指一些创作工具或类似的东西,我的意思是,如果有一个代码来解决这个问题。我需要将每个微调器连接到我的array.xml文件中的字符串数组。

3 个答案:

答案 0 :(得分:2)

Spinner spinner;
LinearLayout layout  = (LinearLayout) findViewById(R.id.layout_id);
for (int i =0 ;i <layout.getChildCount(); i++){
    if(layout.getChildAt(i) instanceof Spinner){
            spinner = (Spinner) layout.getChildAt(i);
    }
}

其中LinearLayout是您的主要布局,其中包含微调器。您可以将微调器添加到列表中,也可以随意添加微调器。

答案 1 :(得分:0)

如果您的微调器不在同一个ViewGroup中,那么您必须执行完整的横向操作:

public static List<Spinner> getAllSpinnersIn(ViewGroup view) {
    List<Spinner> list = new ArrayList<Spinner>();
    getAllSpinnersIn(view, list);
    return list;
}

private static void getAllSpinnersIn(ViewGroup view, List<Spinner> outList) {
    for (int i = 0, len = view.getChildCount(); i < len; i++) {
        View child = view.getChildAt(i);
        if (child instanceof ViewGroup) {
            getAllSpinnersIn((ViewGroup) child, outList);
        } else if (child instanceof Spinner) {
            outList.add((Spinner) child);
        }
    }
}

答案 2 :(得分:0)

这也困扰了我。我采用了sergio91pt的方法,但每次都找到0个微调器。后来我发现问题是Spinner是ViewGroup的间接子类。所以当我们做的时候

  

if(child instanceof ViewGroup)

最好在if分支内再做一次检查

  

if(!(child instanceof Spinner))

所以代码将是

private static void getAllSpinnersIn(ViewGroup view, List<Spinner> outList) {
    for (int i = 0, len = view.getChildCount(); i < len; i++) {
        View child = view.getChildAt(i);
        if (child instanceof ViewGroup) {
            if (!(child instanceof Spinner))
                getAllSpinnersIn((ViewGroup) child, outList);
        } else if (child instanceof Spinner) {
            outList.add((Spinner) child);
        }
    }
}