更改以编程方式创建的视图

时间:2018-09-24 20:32:49

标签: android

我使用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语句中创建的布局以对其进行更改?

3 个答案:

答案 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。