2011-05-20 44 views
3

我想是在创建多个视图循环 例如使用循环

for(int i =1; i<5; i++){ 
GridView view = new Gridview(this); 
} 

但它创造了5 GridView控件具有相同名称创建多个对象..所以在未来我无法设置不同的选项到一个特定的gridview。如何获取,在一个循环中创建的gridivew得到视图+我的名字

+0

你在特林实现?你确定你不能使用适配器吗?或膨胀一些布局? – BFil 2011-05-20 14:26:47

回答

5

使用列表

List<GridView> views = new ArrayList<GridView>(); 
for(int i = 1; i < 5; i++) { 
    views.add(new GridView(this)); 
} 

然后你就可以用

views.get(i); 
+0

我不认为这会编译。 – crazyscot 2011-05-20 14:29:09

+0

当然。我编辑了我的答案。 – Buhb 2011-05-20 14:33:21

3

使用GridViews一个List得到您的意见。

List<GridView> grids = new ArrayList<GridView>(); 
for(int i =1; i<5; i++){ 
    grids.add(new Gridview(this)); 
} 
0

我认为你可以做这样的事情:

for(int i =1; i<5; i++){ 
GridView view = new Gridview(this); 
view.setId(i); 
} 

,然后,可以将所有视图之间的差异

2

我觉得这个代码将创建5个GridView的,其中4个将成为立即可用于垃圾收集,因为您的代码不再有对它们的引用。

如果你在循环中创建它们,那么我想我会将它们存储在一个数据结构中,例如List或Map,然后通过索引或键访问它们。

0
GridView[] view=new GridView[5]; 
for(int i=1;i<5;i++){ 
view[i]=new GridView(this);} 

现在我想你可以设置指定的选项。

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