我试图更改几个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等。 任何帮助表示赞赏。
答案 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中)并迭代它。