我想要的是在for循环中创建多个视图 示例
for(int i =1; i<5; i++){
GridView view = new Gridview(this);
}
但是它创建了5个具有相同名称的gridview ..所以将来我不能为特定的gridview设置不同的选项。我如何获得,在循环中创建的gridivew获取视图+我的名字
答案 0 :(得分:5)
使用列表
List<GridView> views = new ArrayList<GridView>();
for(int i = 1; i < 5; i++) {
views.add(new GridView(this));
}
然后您可以使用
获取您的观点views.get(i);
答案 1 :(得分:4)
此外,在您的示例中,当for
循环的步骤结束时,对该对象的引用将丢失,因为它们的创建范围将保留。在没有引用对象的情况下,垃圾收集器进入并释放该内存,删除对象。
因此,您甚至无法访问最后创建的对象。如果您修改这样的代码,在此代码的末尾您将只实例化最后一个对象:
GridView view;
for(int i =1; i<5; i++){
view = new Gridview(this);
}
现在,该对象存在于您在代码段末尾的范围内。但实际上只存在一个对象。
因此,解决方案是将对象存储在一些额外的结构中:如果您准确知道所需的对象数量,或者某些自动动态分配的集合结构,则可以使用数组。你在其他答案中都有两个例子。
已添加:您实际要求的内容(动态构建对象的引用名称)称为元编程。我不知道Java是否可行,但这里有一个在PHP中完成的例子:
class Object {
function hello(){
echo "Hello \n";
}
}
for($i =1; $i<5; $i++){
$name = "view".$i;
$$name = new Object();
}
$view1->hello();
$view2->hello();
$view4->hello();
以下是可运行的代码:http://codepad.org/bFqJggG0
答案 2 :(得分:3)
使用List
GridViews
。
List<GridView> grids = new ArrayList<GridView>();
for(int i =1; i<5; i++){
grids.add(new Gridview(this));
}
答案 3 :(得分:2)
我认为这段代码会创建5个GridViews,其中4个将立即可用于垃圾收集,因为您的代码不再具有对它们的引用。
如果你在循环中创建它们,那么我想我会将它们存储在数据结构中,例如List或Map,然后通过索引或键访问它们。
答案 4 :(得分:0)
我认为你可以这样做:
for(int i =1; i<5; i++){
GridView view = new Gridview(this);
view.setId(i);
}
然后,您可以区分所有视图
答案 5 :(得分:0)
GridView[] view=new GridView[5];
for(int i=1;i<5;i++){
view[i]=new GridView(this);}
现在我认为你可以设置指定的选项。