2014-01-13 131 views
4

我有一個名爲Data的自定義類,其中包含所有數據。主要活動創建兩個片段。我在主活性的字段是這樣的:將自定義類傳遞給片段

private ArrayList<Fragment> getFragments() { 
    ArrayList<Fragment> fragments = new ArrayList<Fragment>(); 
    fragments.add(new fragment_one()); 
    fragments.add(new fragment_two()); 
    return fragments; 
} 

我需要將數據字段傳遞到片段,該片段可存取權限的:

private Data data = new Data(); 

的片段與此方法創建數據的方法。

我嘗試創建一個包,但我無法傳遞一個自定義類。我能做什麼?

+1

確實數據類實現了嗎? – Raghunandan

+0

它沒有。我會仔細看看的。有另一種方法嗎? – Nfear

+0

http://stackoverflow.com/questions/2139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents。可能是這個幫助 – Raghunandan

回答

4

束可以接受定製類,如果他們實施任何ParcelableSerializableParcelable是更快但更多的工作來實施,並且Serializable更容易實現,但速度更慢。

然後,你可以這樣做:

Bundle bundle = new Bundle(); 
bundle.putSerializable("MyData", data); 
fragment_one.setArguments(bundle); 

現在fragment_one將有機會獲得data在它的onCreate(Bundle bundleHoldingData)方法。

另一個選擇是在你的片段中有一個公共setter,它接收數據。這樣做的好處是您不必等待數據準備好添加片段。

4

數據需要實現Parcelable或Serializable。

然後,您可以使用bundle.putParcelable()或bundle.putSerializable()通過setArguments()方法將數據傳遞給這兩個片段。

1

您不應該將片段的引用傳遞給您,您應該使用setArguments傳遞所有數據(除非保留了片段)。原因是android可能會在配置更改期間破壞您的片段,並在創建活動期間重新創建片段。

所以你應該在setArguments中傳遞你的數據,或者使用單例類來訪問它,也就是說。應用程序類。

[編輯] - 還沒有嘗試過這個自己,但你可以在網上找到的工具,使您的數據類parcelable,這裏是一個:http://devk.it/proj/parcelabler/

0

您可以設置一個靜態對象,具體取決於您保留多少數據並謹慎處理內存泄漏。這樣你就可以在碎片中找到它。但是使數據可以分類並通過捆綁傳遞它總是一個更好的選擇。

0

一種選擇是爲Activity類上的數據提供訪問器。然後,在您的片段中,調用getActivity(),將其轉換爲派生類型,並根據需要獲取數據。

這當然會創建從您的片段到活動的依賴關係,但如果它不是一個通用的,可重用的片段,它將非常簡單直接地實現,並且意味着您可以獲得對當前的Activity數據,而不是像Bundle/Parcelable/Serializable策略那樣的副本。