2014-09-03 91 views
0

我已經看了,但是在這裏或者任何地方都找不到與我的相同的問題。我也是新來的android開發,所以我試圖找出解決這個編程問題的最好方法。Android應用數據實現/活動間傳遞數據

我將舉例說明我正在嘗試做什麼。 我定義了一個容器對象,它包含某種不同類的對象的數據結構(比如arrayList)。主要活動顯示arrayList中所有對象的listView。當用戶從列表中選擇一個項目時,我需要打開一個新的活動來顯示該對象的字段,用戶可以編輯該字段。用戶更改字段,按保存,並重定向到第一個活動。

爲了這個工作,我需要通過第二個活動的對象。我明白我可以使用Serializable或Parcelable來傳遞對象,但我需要能夠編輯對象並將其發回。我的C++大腦說只使用傳遞引用,但我的理解是,這在Java中不可用。

我在這裏看看:http://developer.android.com/guide/faq/framework.html#3,但我不認爲這裏提供的任何解決方案可以解決我的問題。

對不起,我是Android和Java的新手;我的大部分經驗都在C++中。我只是在想這個問題錯了嗎?

感謝您花時間閱讀!

+0

詳細瞭解http://developer.android.com/guide/components/activities.html – 2014-09-03 20:03:46

回答

1

你的直覺是對的。 (1)在要在活動之間傳遞的對象中實現Parcelable接口; (2)將點擊的對象通過Intent傳遞給下一個ActivityFragment; (3)重新加載/刷新列表。

第一步是執行Parcelableandroid docs是非常簡單的,如果你環顧四周,有很多關於如何完成這個任務的例子。

您很可能會在ListView中顯示您的ArrayList對象。您可以通過將ListView添加到Activity的佈局或使用延伸FragmentListFragment來將其作爲獨立視圖來執行此操作。在這兩種情況下,都有方法可以告訴你列表中的哪個項目被點擊。對於ListView,您可以實現一個onItemClick偵聽器,該偵聽器將爲您提供列表中被點擊的位置。在ListFragment有一個onListItemClicked方法,將做大致相同的事情。你應該檢查這些類的文檔。

一旦你知道那是點擊就可以得到,這是點擊,並通過Intent它傳遞給下一個Activity對象(或通過參數的Bundle送,如果你正在開始一個新的片段)的位置。

Intent intent = new Intent(context, ActivityYouWantToStart.class); 
intent.putExtra("KEY", object); 
startActivity(intent) 

這會將對象發送到下一個活動(ActivityYouWantToStart)。爲了找回它,你可以實現在下面的ActivityonCreate方法

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 
} 

一定要覆蓋你的第一個活動這種方法和處理結果。它會將額外的費用返還給您的第一個活動,然後您可以更新列表。如果多個活動正在返回數據,則結果代碼和請求代碼可用於切換功能。

+0

告訴他如何啓動活動結果...這將對從以前的活動返回並獲得資源包的反應 – 2014-09-03 20:01:27

+0

感謝非常完整的答案!不過,我猜想,我的問題是:性能傳遞到對象,編輯它,傳遞回來,然後將編輯的文件複製到選定的原始文件之上,這是不好的? – justinrixx 2014-09-04 16:33:06

+0

取決於對象 - 我不會通過意圖傳遞大型圖像文件,但如果您使用一些主要類的類,它應該不成問題。 – Rarw 2014-09-04 17:52:04

相關問題