2014-01-27 96 views
2

我一直在使用DialogFragment來處理應用程序上的對話框。處理DialogFragment回調的最佳方法是什麼?

我讀過this它提供了有關如何使用它的一些例子,但它總是使用了諸如:

((FragmentAlertDialog)getActivity()).doPositiveClick(); 
((FragmentAlertDialog)getActivity()).doNegativeClick(); 

我真的不喜歡這個實現,因爲它責成強制轉換爲預已知的活動所以它不是很健壯。

我也知道,傳球和存儲FragmentDialog內的回調是不是一個好的選擇,因爲如果它引用了一個活動,例如旋轉後,該活動可能已被破壞......而回調不更新。

當活動通過時還更新回調onResume也不是一個非常可行的選擇,因爲它必須知道顯示哪個對話框並設置與其相關的回調使得在較大的應用程序上的邏輯有點棘手。

那麼你建議什麼實現來避免強制轉換,同時保持最新的回調?

回答

1

你已經列舉了無法使用回調的原因,非常雄辯。不幸的是,我認爲演員(或類似的)是不可避免的。坦率地說,整個範例相當尷尬。

如果您計劃在多個活動之間共享對話框片段,則可以使用一個接口。

((IXyzDialogHost)GetActivity())->onSomethingHappened() 

我想這個方法有些事情要說。我不能說我本人親自使用過這種方法,但考慮到這一點,我可能會試着向前邁進。至少你可以強制執行調用的Activity合同與適當的靜態DialogFragment.Create方法,它與纖維束的設置片段管理事務,和其他unpleasantries涉及:

class XyzDialogFragment { 
    { 
     public static DialogFragment Create(IXyzDialogHost activity, ...) 
     { 
      ... 
     } 

    } 

但還是有演員。

相關問題