2015-07-10 39 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"); 
    } 
} 
相关问题