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