2012-09-25 77 views
2

複雜的對象我實現信息在我的活動中的列表視圖的飼料。在這個活動中,我只是展示了消息的「主線」,而不是對他們的回覆,社交網絡行爲的種類,當你點擊消息時,彈出一個包含該消息的新窗口和對其的回覆。從傳遞到活動和FragmentDialog反之亦然

從Web服務器下載JSONS後,我們storating在複雜的對象,我們稱之爲VO,即UserVO,其中儲存器的所有用戶信息的信息。

此對象包含字符串,整型,其他VO的名單,對於消息飼料列表等......

我的想法是在屏幕的上方打開一個新的FragmentDialog當被點擊時顯示一個消息對該消息的可能答覆,並且可以向其發送回覆。

對於這一點,我將需要通過那些VO的活性和在兩個方向上片段之間的物體,

  • 從活動到DialogFragment:對象與消息飼料。
  • 從片段的活動:一旦用戶寫入文本,並附加圖片(URL),我應發送對象回到活動

我一直在閱讀了很多的信息,有關片段和活動,但我仍然無法找到適合我的解決方案。在初始化Fragment時我需要傳遞幾個對象,這似乎不可能使用newInstance()方法。此外,使用這種方法我需要使我們正在使用的所有VO(複雜)可序列化。另外,我仍然需要將對象(又是複雜的VO)從片段傳遞迴活動......有什麼辦法可以傳遞這些大對象嗎?一個接口是否可以以兩種方式傳遞信息?

我真的很感激任何幫助(有些教程將是真棒),因爲我無法找到這個問題的任何解決方案,而我這裏很堆疊。

在此先感謝!

回答

2

您可以將對象保存爲您的活動中的一員。讓setter &獲得它。 您可以使用getActivity()從Fragment訪問Activity並將Activity轉換爲YourActivity。

這是通過片段和活動之間的信息大方向。

1

什麼捷威提的是做它的方式之一,但更好的處理,這可能是使用工廠模式有效的方式,說在你使用片段內的多個活動的場景。

檢查如何回答Proper way to give initial data to fragments?

瞭解所有的方法,檢查節http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

  1. 創建事件回調到活動
  2. 吸氣劑或二傳手
  3. 工廠方法

對於複雜的對象如果通過在包檢查這個Passing data of a non-primitive type between activities in android實施Paracable應該做的伎倆

3

在你DialogFragmnet類,創建兩個方法:

1的newInstance - >讓你的DialogFragment實例

2 - 二傳手設置你的複雜的對象

public class YourDialogFragment extends DialogFragment { 

     ComplexVariable yourVar; 

     public static YourDialogFragment newInstance(int arg, ComplexVariable var) { 
      YourDialogFragmentfrag = new MoveSongDialogFragment(); 
      Bundle args = new Bundle(); 
      args.putInt("count", arg); 
      frag.setArguments(args); 
      frag.setComplexVariable(var); 
      return frag; 
     } 

     public void setComplexVariable(ComplexVariable var) { 
      yourVar = var; 
     } 
    } 

然後,以顯示對話框

FragmentManager manager = getSupportFragmentManager(); 
FragmentTransaction ft = manager.beginTransaction(); 
    Fragment prev = manager.findFragmentByTag("yourTag"); 
    if (prev != null) { 
     ft.remove(prev); 
    } 

    // Create and show the dialog. 
    DialogFragment newFragment = YourFragmentDialog.newInstance(argument, yourComplexObject); 
    newFragment.show(ft, "yourTag");