2012-08-01 28 views
1

所以删除项目以正确的方式,我有MainActivity与ArrayList的<为MyObject>,ListView控件显示它并EditActivity得到UI编辑项目。适配器的ListView延伸ArrayAdapter <为MyObject>。当用户点击物品时,我想用对象启动EditActivity进行编辑。我怎么能把对象EditActivity?我有:什么是编辑/从ListView控件

Intent i = new Intent(this, EditActivity.class); 
    startActivity(i); 

我怎么能得到EditActivity中的对象? 当然,我可以宣布的ArrayList <为MyObject>静态,并把指数的项目有:

Intent i = new Intent(this, EditActivity.class); 
    i.putExtra("index", iItemIdex); 
    startActivity(i); 

,然后在EditActivity,得到它喜欢:

int iIndex = getIntent().getExtras().getInt("index"); 
    MyObject o = MainActivity.MyArray.get(iIndex); 

但我想这是:-)

回答

0

你不必申报您的列表是静态的。这里是你应该得到它的工作(一种可能性)代码:

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    MyObjectClass obj = (MyObjectClass) arg0.getAdapter().getItem(arg2); 
    Intent intent = new Intent(this, EditActivity.class); 
    intent.putExtra("myKey", obj); 
    startActivity(intent); 
} 

这样,没有无用的静态变量,以及您所使用的方法已经取得了道路。最简单和最干净的解决方案之一IMO。
要小心,要使用此方法,您必须在您的自定义ArrayAdapter中重新定义getItem(int)方法。你应该这样做:

@Override 
public MyObjectClass getItem(int position) { 
    return this.myList.get(position); 
} 

编辑:然后,如果你希望能够删除的项目,我觉得你应该把包含在意向你的对象全名单(不宣布它静态)。然后,只需调用add()/删除()方法,当你想更新UI展现体改名单,在MainActivity返回时只需调用notifyDataSetChanged()上的自定义ArrayAdapter,例如:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    yourListAdater.notifyDataSetChanged(); 
    /* Assuming you have a reference pointing to your adapter in your MainActivity, if you don't just do: ((MyCustomAdapterClass) myListView.getAdapter()).notifyDataSetChanged(); */ 
} 
+0

埃姆... intent.put( “的myKey”,OBJ); 错误:方法put(String,MyObject)未定义类型的意图... – Cosdix 2012-08-01 10:51:34

+0

对不起,我编辑了我的答案。请注意,您想要放入意图的对象必须实现Serializable接口。如果你想放的对象是一个列表,它包含的对象必须实现它。 – Flawyte 2012-08-01 11:01:28

1

不是最好的决定,如果你想编辑ListView,您只需使用其addinsertremove编辑ArrayAdapter,并clear适配器上的功能。

完成之后,您可以拨打notifyDataSetChanged()来通知ArrayAdapter的内容已更改。您ListView将使用新值进行更新。

+0

如何从另一项活动做到这一点 - 这是个问题 – Cosdix 2012-08-01 10:52:33