使用for循环动态更改TextView

时间:2012-04-25 16:54:11

标签: android

我试图更改几个TextView元素的值,但迭代数组列表并添加这些值。但是,我似乎无法找到一种方法来更改每次使用的R.id值。例如:

for (int i=0; i<arrayList.size(); i++)
{
    TextView t = (TextView) dialog.findViewById(R.id.value+(i));
    t.setText(arrayList.get(i));
}

其中值的格式为animals_eng1,animals_eng2等。 任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:4)

最好的办法是创建一个包含每个文本视图的资源ID并循环遍历它们的数组。

离。

int[] textViewIds = new int[] { R.id.animals_eng1, R.id.animals_eng2, R.id.animals_eng3 }; 

然后在您的活动中,您可以循环浏览它们并按照您的意愿设置值

for (int i=0; i<arrayList.size(); i++)
{
   ((TextView)findViewById(textViewIds[i])).setText(arrayList.get(i));
}

您必须确保您的arrayList大小与您设置的textview资源ID的数量相同,否则在循环时最终会出现越界异常

答案 1 :(得分:1)

我不知道如何做到你所要求的,但这里有两种选择:

1.创建一个整数数组,并将数组的每个元素分配给不同的视图id值

int[] ids = new int[arrayList.size()];
ids[0] = R.id.view0;
ids[1] = R.id.view1;
ids[2] = R.id.view2;
//...ids[n] = R.id.viewN; where n goes up to arrayList.size()
for (int i : ids){
     ((TextView)dialog.findViewById(ids[i])).setText(arrayList.get(i));
}

请注意,如果您想要更具动态性的内容,则上述方法sorta会失败,因为您必须为每个TextView添加一行:

2.例如,在TextViews的每个android:tag="prefix0"中添加TextViews,在布局xml中标记findViewWithTag。在循环之前找到布局的父视图,然后在for循环中使用该视图的Dialog方法。从你的代码中我猜你正在使用带有自定义布局xml的ViewGroup parent = dialog.findViewById(R.id.parent); //or whatever the name of your parent LinearLayout/RelativeLayout/whatever is String commonPrefix = "prefix"; //or whatever you've tagged your views with for (int i=0; i<arrayList.size(); i++){ TextView t = (TextView) parent.findViewWithTag(commonPrefix+i); t.setText(arrayList.get(i)); } ,所以你首先要找到它的父代:

{{1}}

答案 2 :(得分:0)

解决此问题的一种方法是将资源ID放在int数组中,并将资源放在索引i处。

TextView t = (TextView) dialog.findViewById(R.id.value+(i))

变为

TextView t = (TextView) dialog.findViewById(resourceArray[i])

答案 3 :(得分:0)

如果您的所有视图都在同一个容器上(并且只有它们),只需遍历其子项。

如果没有,你可以添加一个id数组(在res中)并迭代它。