2012-08-01 53 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