如何使用数组列表填充微调框?

时间:2019-05-01 06:43:36

标签: java android arraylist android-spinner

我想用一个Spinner填充一个ArrayList,但是它正在重复每个项目的最后一个值。我该如何解决?

Android screenshot

如屏幕截图所示,它四次显示“上个月”,而不是预期的“今天”,“昨天”,“当前月”和“上个月”。

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;
    }
}

1 个答案:

答案 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);
}