添加大量文本视图

时间:2017-03-23 19:43:12

标签: java android loops

我想在代码中分配很多TextViews(总共272个):

texx1 = (TextView) findViewById(R.id.resul1);
texx2 = (TextView) findViewById(R.id.resul2);
texx3 = (TextView) findViewById(R.id.resul3);
texx4 = (TextView) findViewById(R.id.resul4);
...
texx272 = (TextView) findViewById(R.id.resul272);

关于我如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:0)

使用固定ID并且没有将其静态类型化为属性的唯一选项是TextView列表,其中包含对视图的引用,如下所示:

List<TextView> textviews = new ArrayList<>();
Resources res = getResources();

for (int i = 1; i <=272; i++) {

    int id = res.getIdentifier("resul" + i, "id", getContext().getPackageName());
    TextView tv = (TextView) findViewById(id);
    textviews.add(tv);
}

从此处开始,您必须访问列表项才能访问所需的textview

TextView textViewToAccess = textViews.get(13);
textViewToAccess.setText(...);

答案 1 :(得分:0)

Android有API可以动态(按名称)检索ID常量:Android, getting resource ID from string?,它可用于“批量生产”这些ID。
并且为了存储结果,可以使用数组或集合。

此外,以这种方式编写代码肯定会让你成为必须维护代码的人的敌人。更好的想法是思考两次,并提出一些更好的设计。

答案 2 :(得分:0)

我假设您有 272 TextViews,所有人都有不同的ID?

您可以通过类似这样的字符串获取int id ...

public static int getIdByName(String name) {
    return getResourceIdByName(name, "id");
}

public static int getResourceIdByName(String name, String type) {
    StringBuilder s = new StringBuilder(context.getPackageName()).append(":").append(type).append("/").append(name);
    return context.getResources().getIdentifier(s.toString(), null, null);
}

所以对你来说,你可以使用上面的内容并循环遍历所有272个TextView并插入List<TextView>,如下所示:

List<TextView> results = new ArrayList<>();
for (int i = 1; i <= 272; i++) {
    TextView textView = (TextView) getIdByName("resul" + i);
    results.add(textView);
}