我正在尝试在我的程序中执行以下操作
ImageView temp = new ImageView(this); //initialize beforehand somewhere in the program
ArrayList<Photos> photos = new ArrayList<Photos>(); //Photos has an ImageView that can be set via constructor
callBackMethod(YoutubeThumbnailView source){
temp.setImageDrawable(source.getDrawable());
photos.add(new Photo(temp)); //or just do photos.add(new Photo(source)) directly
aMethodThatCallsThisMethodAgain();
}
在Photos ArrayList中的每个位置都会发生一个带有最后一个youtubeThumbnailView的photo()。
当我检索它时,所有位置都具有相同的ImageView。
每次我使用独特的临时ImageView时,它只存储不同的ImageView。
e.g。 temp1.setImageDrawable(source.getDrawable()); temp2.setImageDrawable(source.getDrawable()); temp3.setImageDrawable(source.getDrawable()); ..........
等等。
为什么会这样?
答案 0 :(得分:0)
由于递归,它当然会将imageview src设置为最后一个更新为变量名,包括引用是相同的
当你插入临时imageview时,它的引用被存储到新照片(temp)初始化而不是完整变量。由于整个arraylist对象具有与引用相同的temp,我的意思是你所有的imageviews都通过新照片()方法只是指向内存中的相同临时变量,因此对temp的任何更改都会导致所有图像视图的更改,您可以测试并查看
您可以参考stackoverflow上的硬拷贝/软拷贝来更好地理解这一点 我建议你创建一个新的图像视图arraylist并通过索引
引用它们到你的照片构造函数ArrayList<Photos> photos = new ArrayList<Photos>(); //Photos has an ImageView that can be set via constructor
callBackMethod(YoutubeThumbnailView source){
ImageView temp = new ImageView(this); //initialize beforehand somewhere in the program
temp.setImageDrawable(source.getDrawable());
photos.add(new Photo(temp)); //or just do photos.add(new Photo(source)) directly
aMethodThatCallsThisMethodAgain();
}
答案 1 :(得分:0)
你所拥有的是一个“床头柜”,里面有一个抽屉和一个蛋糕盒。
你所做的就是每一个你带着你扔掉旧的ccookies并填写新的ccookies。
相反,你应该得到一个带有许多抽屉的大型侧板,并在每次出现时在下一个空抽屉里放一个新的蛋糕盒。
转换为您的代码,这意味着您需要LocaleProjects
Collection
并在每次递归时添加一个新的ImageView
对象。
出于临时目的而使其变大的抽屉是不可取的不是吗?
这根本不可能。我的示例中的“抽屉”是列表中的位置。您只能在列表中的某个位置只有一个项目。坚固这个棘手的海湾是容器本身,例如另一个ImageView
或Collection
...