你的直覺是對的。 (1)在要在活動之間傳遞的對象中實現Parcelable
接口; (2)將點擊的對象通過Intent
傳遞給下一個Activity
或Fragment
; (3)重新加載/刷新列表。
第一步是執行Parcelable
。 android docs是非常簡單的,如果你環顧四周,有很多關於如何完成這個任務的例子。
您很可能會在ListView
中顯示您的ArrayList
對象。您可以通過將ListView
添加到Activity
的佈局或使用延伸Fragment
的ListFragment
來將其作爲獨立視圖來執行此操作。在這兩種情況下,都有方法可以告訴你列表中的哪個項目被點擊。對於ListView
,您可以實現一個onItemClick
偵聽器,該偵聽器將爲您提供列表中被點擊的位置。在ListFragment
有一個onListItemClicked
方法,將做大致相同的事情。你應該檢查這些類的文檔。
一旦你知道那是點擊就可以得到,這是點擊,並通過Intent
它傳遞給下一個Activity
對象(或通過參數的Bundle
送,如果你正在開始一個新的片段)的位置。
Intent intent = new Intent(context, ActivityYouWantToStart.class);
intent.putExtra("KEY", object);
startActivity(intent)
這會將對象發送到下一個活動(ActivityYouWantToStart)。爲了找回它,你可以實現在下面的Activity
的onCreate
方法
Bundle stuffYouSent = getIntent().getExtras();
if(stuffYouSent != null){
Object o = stuffYouSent.getParcelable("KEY");
//do something
}
當然你可以在類從對象到您發送的任何只需相應投你的結果而改變。
要讓對象回到原來的活動狀態,你必須反過來重複這個過程。進行編輯,完成後通過意圖傳回。當收到對象時,您可以重新將其添加到列表或重新加載整個列表,具體取決於列表視圖的實現方式。
編輯 - startActivityForResult
而不是簡單地啓動,你可以使用startActivityForResult
下一個活動時,你知道你將重返回的第一個活動。你可以看到one example here但在你的背景:
Intent intent = new Intent(context, ActivityYouWantToStart.class);
intent.putExtra("KEY", object);
startActivityForResult(intent, REQUEST_CODE);
在這裏,你仍然傳遞對象到下一個活動,但指定,「REQUEST_CODE」表示接收到的意圖時要執行的操作。當意圖開始第二個活動時,你會像平常那樣處理意圖。完成後,按如下方式將數據傳回第一個活動:
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(RESULT_OK, returnIntent);
finish();
此處RESULT_OK表示操作已完成。這一次,而不是像之前一樣開始活動,一個特殊的方法將被調用:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//do something
}
一定要覆蓋你的第一個活動這種方法和處理結果。它會將額外的費用返還給您的第一個活動,然後您可以更新列表。如果多個活動正在返回數據,則結果代碼和請求代碼可用於切換功能。
詳細瞭解http://developer.android.com/guide/components/activities.html – 2014-09-03 20:03:46