我想用一个Spinner
填充一个ArrayList
,但是它正在重复每个项目的最后一个值。我该如何解决?
如屏幕截图所示,它四次显示“上个月”,而不是预期的“今天”,“昨天”,“当前月”和“上个月”。
List<S_lapse> list_lapse = new ArrayList<S_lapse>();
list_lapse.clear();
String myDescription[] = {"Today","Yesterday","Current Month","Last Month"};
S_lapse item2 = new S_lapse();
for (int i = 0; i < myDescription.length; i++) {
item2.setDescription(myDescription[i]);
list_lapse.add(item2);
}
/*SPINNER*/
sp2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position > 0){
}else{
}
}
});
adapter_period = new Adapter_spinner(getActivity(), list_lapse);
sp2.setAdapter(adapter_period);
S_lapse
类:
public class S_lapse {
private String description;
public S_lapse(){
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
答案 0 :(得分:2)
在这种情况下,每当您创建对象
(item2)
时,java就会在堆中为该特定对象分配一个内存。现在,如果您添加一些数据(item2.setDescription(myDescription[i]))
,则Java将使用先前定义的对象的引用为该数据提供一些内存。再一次,如果您将其他数据放入setDescription()
方法中,则只是替换指定内存中的数据,而不添加数据。 这就是为什么对于i=0
的描述是"Today"
,但是对于i=1
的描述却变成了"Yesterday"
。 将“ objects(item2)”视为建筑物,将“ description”视为特定房间。如果您不创建新建筑物,那么您只是在替换室友,而不是添加他们。因此替换此代码
S_lapse item2 = new S_lapse();
for (int i = 0; i < myDescription.length; i++) {
item2.setDescription(myDescription[i]);
list_lapse.add(item2);
}
与此
for (int i = 0; i < myDescription.length; i++) {
S_lapse item2 = new S_lapse();
item2.setDescription(myDescription[i]);
list_lapse.add(item2);
}