从ListView编辑/删除项目的正确方法是什么

时间:2012-08-01 09:49:51

标签: android listview

所以,我有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);

但我猜这不是最好的决定: - )

2 个答案:

答案 0 :(得分:1)

如果您要修改ListView,只需使用ArrayAdapteraddinsert和{{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(); */
}