所以,我有MainList与ArrayList< MyObject&gt ;, ListView用于显示它,EditActivity用于获取用于编辑项目的UI。 ListView的适配器扩展了ArrayAdapter<为MyObject取代。当用户单击项目时,我想要使用对象启动EditActivity进行编辑。我怎么能把对象放到EditActivity?我有:
Intent i = new Intent(this, EditActivity.class);
startActivity(i);
如何在EditActivity中获取对象? 当然,我可以声明ArrayList<为MyObject> as static和put index of the item with:
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 :(得分:1)
如果您要修改ListView
,只需使用ArrayAdapter
,add
,insert
和{{1}编辑remove
即可。适配器上的函数。
完成后,您致电clear
以通知notifyDataSetChanged()
的内容已更改。您的ArrayAdapter
将使用新值进行更新。
答案 1 :(得分: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最简单,最干净的解决方案之一
小心,要使用此方法,您必须在自定义getItem(int)
中重新定义ArrayAdapter
方法。你应该这样做:
@Override
public MyObjectClass getItem(int position) {
return this.myList.get(position);
}
编辑:然后,如果您希望能够删除项目,我认为您应该将包含您的对象的整个列表放在intent中(不要将其声明为静态)。然后只需调用add()/ remove()方法,当你想更新UI以显示修改后的列表时,只需在自定义ArrayAdapter上调用notifyDataSetChanged(),例如在MainActivity中返回时:
@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(); */
}