我正在以编程方式添加多个XML View
。我正在使用布局inflater来添加它们,并且没有问题。
但是我无法修改每个TextView
。
例如,考虑我在最终LinearLayout
中添加View
三次。我在线性布局中有一个TextView
。我使用findViewById
提取它,如果我setText("hello");
它会反映在第一个布局中,而不是第二个和第三个布局中。
在添加多个XML元素时,inflater是否会动态创建新ID?
答案 0 :(得分:0)
要回答部分问题,请注意:LayoutInflater
不会动态生成ID。
当您说要添加视图时,您在哪里添加它们?你提到了最终的观点。
您不包含代码,但我假设您正在调用Activity.findViewById
。如果您从this.findViewById
调用Activity
,则表示您正在遍历整个视图层次结构并找到包含此ID的第一个视图。
您需要做的是,遍历包含LinearLayout
的所有TextView
并在每个findViewById
上调用for (LinearLayout layout : <fill in>) {
((TextView) layout.findViewById(R.id.yourid)).setText("hello");
}
。
<fill in>
至于View parent = some view;
。没有你的代码很难说明如何填写它。看起来你正在将它们添加到父视图中吗?我们假设我们有一个父LinearLayout
。
你必须得到它的所有孩子并进行迭代。有几种方法可以执行此操作,具体取决于查看父级的子类。让我们保持简单,假设父母只是另一个for (int i = 0; i < parent.getChildCount(); i++) {
final LinearLayout layout = (LinearLayout) parent.getChildAt(i);
((TextView) layout.findViewById(R.id.yourid)).setText("hello");
}
。
在这种情况下,for循环变为类似:
{{1}}