使用 FragmentStatePagerAdapter 时如何获取当前片段

How to get the current fragment when using FragmentStatePagerAdapter

使用任何一种寻呼机适配器时,获取当前片段都非常困难。但是,使用 FragmentPagerAdapter,您可以查找带有标签 "android:switcher:" + viewId + ":" + id.

的片段

不幸的是,FragmentStatePagerAdapter 似乎没有标准标签。 A related question 提供了一些建议手动保留片段缓存的答案,这在进行轮换时被认为是不充分的:底层适配器将状态存储在包中并在创建时恢复它,从而导致任何简单的缓存失败的解决方案。

我找到了更好的解决方案。 getCurrentFragment()据我所知无法正确实施。

我的代码之前启动了一个对话框,然后回调到由对话框存储在 onAttach 的 Activity。 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");
    }
}