2012-11-05 81 views
2

我正在构建一个android应用程序,我试图将对象添加到ArrayList。我认为这会在ArrayList中创建对象的副本,然后我可以重新使用该对象。我意识到情况并非如此,ArryList实际上是引用原始对象。克隆新的对象传递给ArrayList?

我真的不知道如何使用循环在onCreate函数中创建新对象,所以我不知何故需要克隆该对象并将其传递给ArrayList

反正这里是我的代码:

public class Main extends Activity { 
    private Item myItem = new Item(); 

    btnSave.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      alItems.add(myItem); 
      arrayAdapter.notifyDataSetChanged(); 

回答

3

您可以创建一个在您Itemcopy constructor,并用它来创建对象的副本。

public class Item { 
    private int field1; 
    public Item() { } 

    public Item(Item item) { 
     this.field1 = item.field1; 
    } 
} 

和使用对象添加到列表: -

alItems.add(new Item(myItem)); 
+0

辉煌不知道拷贝构造函数,它的工作一种享受! – KingFu

2

让您Item实施Clonable然后

public void onClick(View v) { 
     alItems.add(myItem.clone()); 
     arrayAdapter.notifyDataSetChanged(); 
+1

复制构造函数比使用'clone'方法更好。请看'Effective Java - Item#11' –

+0

@RohitJain I'v在我的环境中使用了复制构造函数,但是已迁移到克隆,并且极大地简化了实现。 –