1

所以,我有带有 ArrayList<MyObject> 的 MainActivity、用于显示它的 ListView 和用于获取用于编辑项目的 UI 的 EditActivity。ListView 的适配器扩展了 ArrayAdapter<MyObject>。当用户单击项目时,我想用对象启动 EditActivity 进行编辑。我怎么能把对象放到EditActivity?我有:

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

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

4

2 回答 2

1

如果要编辑 a ListView,只需ArrayAdapter使用Adapter 上的addinsertremove和函数编辑 。clear

完成此操作后,您调用notifyDataSetChanged()以通知 的内容ArrayAdapter已更改。您ListView将使用新值进行更新。

于 2012-08-01T09:55:29.843 回答
0

您不必将 List 声明为静态的。这是您应该让它工作的代码(一种可能性):

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

编辑:然后,如果您希望能够删除项目,我认为您应该将包含您的对象的整个列表放入意图中(不要将其声明为静态)。然后只需调用 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(); */
}
于 2012-08-01T10:01:33.180 回答