使用 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");
}
}
使用任何一种寻呼机适配器时,获取当前片段都非常困难。但是,使用 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");
}
}