Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FragmentStatePagerAdapter时如何获取当前片段_Java_Android_Android Fragments_Android Pageradapter - Fatal编程技术网

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

Java 使用FragmentStatePagerAdapter时如何获取当前片段,java,android,android-fragments,android-pageradapter,Java,Android,Android Fragments,Android Pageradapter,使用任何一个寻呼机适配器都很难获取当前片段。但是,使用FragmentPagerAdapter,您可以查找标记为“”android:switcher:“+viewId+”:“+id”的片段 不幸的是,似乎没有FragmentStatePagerAdapter的标准标记。提供了两个答案,建议手动保留片段的缓存,这在执行旋转时被认为是不够的:底层适配器将状态存储在捆绑包中,并在创建状态时将其恢复,导致任何简单的缓存解决方案失败。我找到了一个更好的解决方案getCurrentFragment()无法正

使用任何一个寻呼机适配器都很难获取当前片段。但是,使用FragmentPagerAdapter,您可以查找标记为“
”android:switcher:“+viewId+”:“+id
”的片段


不幸的是,似乎没有FragmentStatePagerAdapter的标准标记。提供了两个答案,建议手动保留片段的缓存,这在执行旋转时被认为是不够的:底层适配器将状态存储在捆绑包中,并在创建状态时将其恢复,导致任何简单的缓存解决方案失败。

我找到了一个更好的解决方案<代码>getCurrentFragment()无法正确实现

我的代码之前启动了一个对话框,然后调用该对话框存储在onAttach的活动。然后,活动需要找到正确的片段,这是有问题的

正确的解决方案是首先在新对话框片段上调用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");
    }
}