0

我正在尝试更改几个 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

4 回答 4

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 的数量相同,否则您将在循环时出现越界异常

于 2012-04-25T17:01:02.640 回答
1

我不知道一种方法可以完全按照您的要求进行操作,但这里有两种选择:

1.创建一个Integers数组,并将数组的每个元素分配给不同的view 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));
}

请注意,上面的方法有点失败,因为TextView如果你想要更动态的东西,你必须为 each 设置一行:

2.TextViews在布局 xml 中添加标签android:tag="prefix0",例如,添加到您的每个TextViews. 在循环之前找到布局的父视图,然后findViewWithTag在循环中使用该视图的方法for。从您的代码中,我猜您正在使用Dialog带有自定义布局 xml 的 a,因此您首先要找到它的父级:

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)); 
}
于 2012-04-25T16:59:23.530 回答
0

解决此问题的一种方法是将您的资源 id 放在一个 int 数组中并在索引 i 处获取资源。

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

变成

TextView t = (TextView) dialog.findViewById(resourceArray[i])
于 2012-04-25T16:59:59.097 回答
0

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

如果没有,您可以添加一个 id 数组(在 res 中)并对其进行迭代。

于 2012-04-25T17:20:55.623 回答