我想是在创建多个视图循环 例如使用循环
for(int i =1; i<5; i++){
GridView view = new Gridview(this);
}
但它创造了5 GridView控件具有相同名称创建多个对象..所以在未来我无法设置不同的选项到一个特定的gridview。如何获取,在一个循环中创建的gridivew得到视图+我的名字
我想是在创建多个视图循环 例如使用循环
for(int i =1; i<5; i++){
GridView view = new Gridview(this);
}
但它创造了5 GridView控件具有相同名称创建多个对象..所以在未来我无法设置不同的选项到一个特定的gridview。如何获取,在一个循环中创建的gridivew得到视图+我的名字
使用GridViews
一个List
得到您的意见。
List<GridView> grids = new ArrayList<GridView>();
for(int i =1; i<5; i++){
grids.add(new Gridview(this));
}
我认为你可以做这样的事情:
for(int i =1; i<5; i++){
GridView view = new Gridview(this);
view.setId(i);
}
,然后,可以将所有视图之间的差异
我觉得这个代码将创建5个GridView的,其中4个将成为立即可用于垃圾收集,因为您的代码不再有对它们的引用。
如果你在循环中创建它们,那么我想我会将它们存储在一个数据结构中,例如List或Map,然后通过索引或键访问它们。
GridView[] view=new GridView[5];
for(int i=1;i<5;i++){
view[i]=new GridView(this);}
现在我想你可以设置指定的选项。
另外,在您的示例中,当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
你在特林实现?你确定你不能使用适配器吗?或膨胀一些布局? – BFil 2011-05-20 14:26:47