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