Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改以编程方式创建的视图_Android - Fatal编程技术网

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

Android 更改以编程方式创建的视图,android,Android,我使用for语句创建线性布局并将其添加到预先存在的垂直线性布局中。创建它们时,我使用for语句变量为每个布局分配一个id,这样第一个布局的id为0,最后一个布局的id为4 for(int i = 0; i < 5; i++){ create layout layout.setID(i); } 但是如何引用在for语句中创建的布局来对其进行更改呢?您可以使用findviewbyd()函数来完成。假设我们有称为容器的垂直线性布局。现在我们可以将其中的4个项目充气(

我使用for语句创建线性布局并将其添加到预先存在的垂直线性布局中。创建它们时,我使用for语句变量为每个布局分配一个id,这样第一个布局的id为0,最后一个布局的id为4

 for(int i = 0; i < 5; i++){
      create layout
      layout.setID(i);
 }

但是如何引用在for语句中创建的布局来对其进行更改呢?

您可以使用findviewbyd()函数来完成。假设我们有称为容器的垂直线性布局。现在我们可以将其中的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);
}
LinearLayout container=findviewbyd(R.id.container);
对于(int i=0;i<5;i++){
View child=GetLayoutFlater().充气(R.layout.item,null);
child.setId(i);
container.addView(子级);
}
添加子布局后,我们可以通过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));
}
for(int i=0;i<5;i++){
View=container.findviewbyd(i);//这里我们得到子线性布局
//现在我们可以访问子线性布局中的任何视图并对其进行更改,
//或者更改子布局本身的某些参数。
TextView TextView=view.findViewById(R.id.text);
textView.setText(String.format(“已更改的文本%d”,i));
}

您可以使用findviewbyd()函数来完成。假设我们有称为容器的垂直线性布局。现在我们可以将其中的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);
}
LinearLayout container=findviewbyd(R.id.container);
对于(int i=0;i<5;i++){
View child=GetLayoutFlater().充气(R.layout.item,null);
child.setId(i);
container.addView(子级);
}
添加子布局后,我们可以通过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));
}
for(int i=0;i<5;i++){
View=container.findviewbyd(i);//这里我们得到子线性布局
//现在我们可以访问子线性布局中的任何视图并对其进行更改,
//或者更改子布局本身的某些参数。
TextView TextView=view.findViewById(R.id.text);
textView.setText(String.format(“已更改的文本%d”,i));
}

如果您自己创建视图(或布局)对象并将其添加到屏幕上,您必须自己跟踪它们,可能通过ArrayList或HashMap或任何其他方式。注意:使用setID()可能会遇到冲突(两个视图具有相同的id),为了避免冲突,您可以使用View.generateView()并跟踪您获得的所有id并将其映射到视图。

如果您自己创建视图(或布局)对象并将其添加到屏幕上,您必须自己跟踪它们,可能通过ArrayList或HashMap或任何其他方式。注意:使用setID()可能会遇到冲突(两个视图具有相同的id),为了避免冲突,您可以使用View.generateView()并跟踪您获得的所有id并将其映射到视图。

理想情况下,id应该位于资源文件中,以避免与现有id发生任何冲突。在您的情况下,如果视图是动态的,那么将这些ID放在资源文件中也不是一个好主意


我建议使用setTag()方法而不是setId()。稍后,您可以执行getViewWithTag()以获取与该标记关联的视图。

Id最好位于资源文件中,以避免与现有Id冲突。在您的情况下,如果视图是动态的,那么将这些ID放在资源文件中也不是一个好主意


我建议使用setTag()方法而不是setId()。稍后,您可以执行getViewWithTag()以获取与该标记关联的视图。

这不是您问题的答案,但是如果您只有4个子容器/线性布局,我建议您只需手动将它们放置在XML中。这往往更容易处理。如果通过编程来避免重复属性,则可以使用样式来消除重复。我希望通过编程来创建它们,因为布局的数量和内容取决于用户输入。否则,我会在使用XML之前创建布局。这不是对您问题的回答,但是如果您只有4个子容器/线性布局,我建议您只需手动将它们放置在XML中。这往往更容易处理。如果通过编程来避免重复属性,则可以使用样式来消除重复。我希望通过编程来创建它们,因为布局的数量和内容取决于用户输入。否则,我将在使用XML之前创建布局。