2015-07-10 37 views
1

使用任一尋呼機適配器時,獲取當前片段令人驚訝地很困難。但是,使用FragmentPagerAdapter,您可以使用標記"android:switcher:" + viewId + ":" + id查找片段。如何在使用FragmentStatePagerAdapter時獲取當前片段

不幸的是,似乎沒有FragmentStatePagerAdapter的標準標籤。 A related question提供了幾個答案,建議手動保留片段的緩存,這在循環中被指出是不夠的:底層適配器將狀態存儲在包中並在創建時將其恢復,導致任何簡單的緩存解決方案失敗。

回答

0

我找到了更好的解決方案。 getCurrentFragment()無法正確實施,我可以告訴。

我的代碼先前啓動了一個對話框,然後回調到由onAttach對話框存儲的Activity。該活動然後需要找到正確的片段,這是有問題的。

正確的解決辦法是,先呼叫setTargetFragment()的新的對話框片段:

SelectProblemDialogFragment f = SelectProblemDialogFragment.newInstance(args); 
f.setTargetFragment(this, 0); 
f.show(getFragmentManager(), "select_problem_dialog_fragment"); 

,然後在onAttach(),簡單地使用,作爲監聽器。

@Override 
public void onAttach(Activity activity) 
{ 
    super.onAttach(activity); 

    try 
    { 
     mListener = (SelectProblemDialogListener) getTargetFragment(); 
     if (mListener == null) 
     { 
      mListener = (SelectProblemDialogListener) activity; 
     } 
    } catch (ClassCastException e) 
    { 
     throw new ClassCastException("Must implement SelectProblemDialogListener"); 
    } 
} 
相關問題