2017-04-24 71 views
0

考慮這種情況: 有mainActivity。形成這個活動,我們可以調用兩個片段:fragmentAfragmentB如何獲得片段中相同的活動實例?

mainActivity有一個吸氣器getValue和一個設定器setValue

大多數情況下,這是應用程序的工作原理:mainActivity已創建。從它fragmentA被創建。在fragmentA中按下後退按鈕後,應用程序將移回mainActivity並轉至fragmentB

我想要做的是,我想setValuemainActivityfragmentA,並得到fragmentB該值。

我無法做到這一點,因爲它看起來像兩個片段不具有相同的活動實例。

這是我嘗試從fragmentAfragmentB訪問mainActivity制定者/吸氣:((MainActivity)getContext()).getValue();

我在做什麼錯?

+0

請在這裏MainActivity和片段的發佈您的代碼之間的值。 –

+0

聽起來像這樣。 http://stackoverflow.com/questions/24777985/how-to-implement-onfragmentinteractionlistener –

+0

@marius什麼是你傳遞給第二個片段的getValue? –

回答

0

創建在活性的Bunde的對象束

Bundle bundle = new Bundle(); 

插入值(可以將多個值)
鍵可以是任意字符串,並應是唯一的每個值

bundle.setString(key,"value"); 

創建對象的相應片段並將其附加到它

fragmentobject.setArguments(bundle); 

在接收片段創建包對象

Bundle fragmentbundle = getArguments(); 
String value = fragmentbundle.getString(key); 

你這是怎麼傳的片段和活動或活動和活動

+0

當然,這可能是最「正確」的做法。但是,我還需要傳遞BigDecimal值,並且盡我所知,您不能(或者您需要將其轉換爲String)。 – Marius

+0

'字符串值=「1,000,000,000.999999999999999」; BigDecimal money = new BigDecimal(value.replaceAll(「,」,「」)); System.out.println(money);' –

+0

@Marius'BigDecimal'是'Serializable'。 –

0

我會建議使用以下方法:

((MainActivity) getActivity()).getValue; 

同時,確保在MainActivitygetValue()方法設置爲公開。

我希望這有助於。

+0

盡我所知 - 你應該使用getActivity進行與UI相關的工作getContext瞭解某些應用狀態。 – Marius

+0

那麼,我使用我提到的用於發送和接收來自我主要活動的數據的方法。如果我誤解了你,請糾正我。 –

+0

將你的片段連接到任何一個活動是一個糟糕的設計 –

相關問題