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