我使用for语句创建线性布局并将其添加到预先存在的垂直linearlayout中。创建它们时,我使用for语句变量为每个变量分配一个ID,因此第一个布局的ID为0,最后一个布局的ID为4。
for(int i = 0; i < 5; i++){
create layout
layout.setID(i);
}
我知道如何更改像这样创建的视图
Linearlayout linearLayout = new LinearLayout();
linearLayout.makeSomeChanges;
但是如何引用在for语句中创建的布局以对其进行更改?
答案 0 :(得分:3)
您可以使用findViewById()函数来实现。假设我们有称为 container 的垂直线性布局。现在,我们可以向其中充气4个项目(在我的情况下,这是线性布局,内部有TextView)。请参见下面的代码:
LinearLayout container = findViewById(R.id.container);
for (int i = 0; i < 5; i++) {
View child = getLayoutInflater().inflate(R.layout.item, null);
child.setId(i);
container.addView(child);
}
添加子布局后,我们可以通过id访问其视图,并像在TextView中一样更改其中的任何视图:
for (int i = 0; i < 5; i++) {
View view = container.findViewById(i); // here we get child linear layout
// now we can access any view inside child linear layout and change it,
// or change some parameters of the child layout itself.
TextView textView = view.findViewById(R.id.text);
textView.setText(String.format("Changed Text %d", i));
}
答案 1 :(得分:1)
Id应该在资源文件中,以避免与现有ID发生冲突。如果您的视图是动态的,那么将这些ID放入资源文件也不是一个好主意。
我建议使用setTag()方法代替setId()。稍后,您可以执行getViewWithTag()以获取与该标签关联的视图。
答案 2 :(得分:0)
如果您要自己创建View(或布局)对象并将其添加到屏幕,则必须自己跟踪它们,可能是通过ArrayList或HashMap或其他任何方式。请注意:使用setID()可能会发生冲突(两个具有相同ID的视图),为避免这种情况,可以使用View.generateViewId()并跟踪获得的所有ID并将它们映射到View。