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

を編集する場合は、アダプタの、、、、および関数を使用してListView編集するだけです。ArrayAdapteraddinsertremoveclear

それが終わったら、を呼び出して、の内容が変更されnotifyDataSetChanged()たことを通知します。ArrayAdapter新しいListView値で更新されます。

于 2012-08-01T09:55:29.843 に答える
0

リストを静的と宣言する必要はありません。これがあなたがそれを機能させるために必要なコードです(1つの可能性):

@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の1つ。
注意してください。このメソッドを使用するにgetItem(int)は、カスタムでメソッドを再定義する必要がありますArrayAdapter。あなたはこれをするべきです:

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

編集:次に、アイテムを削除できるようにする場合は、オブジェクトを含むリスト全体をインテントに入れる必要があると思います(静的と宣言しないでください)。次に、add()/ remove()メソッドを呼び出すだけで、UIを更新して変更されたリストを表示する場合は、たとえばMainActivityに戻るときに、カスタムArrayAdapterでnotifyDataSetChanged()を呼び出すだけです。

@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 に答える