java—向v.findviewbyid(r.id.iteratehere1)添加自定义数量的数组对象,而不重复代码

4c8rllxm  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(208)

我想在添加v.findviewbyid(r.id.iteratehere1)时迭代10次,而不必重复相同的语法。
我首先想到的是:

SwitchCompat instance1 = v.findViewById(R.id.iterateHere1);
SwitchCompat instance2 = v.findViewById(R.id.iterateHere2);
SwitchCompat instance3 = v.findViewById(R.id.iterateHere3);

上面的代码写了10次。
我现在有:

SwitchCompat[] array = new SwitchCompat[10];

        for (int i = 0; i < 10; i++) {
            SwitchCompat instance;
            array[i] = instance = v.findViewById(R.id.iterateHere1);
            instances.add(instance);
        }

对每个示例都有效。
我的问题是怎么加10 R.id.iterateHere1 不重复代码?

b1uwtaje

b1uwtaje1#

您可以通过以下方式获得每个switchcompat的标识符:

SwitchCompat[] array = new SwitchCompat[10];

 for (int i = 0; i < 10; i++) 
      {
      SwitchCompat instance;
      String switchId = "iterateHere" + i;
      int resID = getResources().getIdentifier(switchId, "id", getActivity().getPackageName());

      array[i] = instance = v.findViewById(resID);
      instances.add(instance);
      }
jk9hmnmh

jk9hmnmh2#

也许把开关放在一个视图组中,然后遍历它们,像这样

ArrayList<SwitchCompat> instances = new ArrayList<>(10);
 ViewGroup parent = findViewById(R.id.parent);
        for (int index = 0; index < parent.getChildCount(); ++index) {
            View nextChild = parent.getChildAt(index);
            if (nextChild instanceof SwitchCompat) {
                instances.add((SwitchCompat) nextChild);
            }
        }

相关问题