【发布时间】:2014-06-24 16:05:59
【问题描述】:
我们都知道Fragment 中的getParentFragment 是在API 17 中引入的。
如果我们想在 API 16 及以下获取父片段怎么办(考虑到我使用原生 Fragment 支持 FragmentStatePagerAdapter 并且嵌套片段没有问题)
还有比我更好的方法吗?
在父母中:
public class ParentFragment extends Fragment {
public static ParentFragment StaticThis;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StaticThis = this;
...
}
在孩子中:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
parentFragment = (ParentFragment) getParentFragment();
else
parentFragment = ParentFragment.StaticThis;
【问题讨论】:
-
直到 API 级别 17 或通过 Android 支持包才支持嵌套片段。因此,在 API 级别 17 之前没有“父片段”的概念。您的“解决方案”是内存泄漏。
-
我正在使用 ViewPager,需要从项目与 ViewPager 的容器对话。 @CommonsWare,所以没有安全的方法来与 API 17 下的父片段(调用某种方法)对话?
-
由于 API 17 以下没有父片段,因此无法与 API 17 以下的父片段对话。
-
@Snicolas:没有“父片段”的概念,除了 API 级别 17+ 或使用片段反向端口。如果您使用其中任何一个,请使用
getParentFragment()。 -
@CommonsWare,其他方式仍然是可能的。例如,我一直在寻找是否可以将每个片段的引用与其 childMananger 进行比较,并递归地遍历树,直到找到父片段(有一个管理器,您的子片段具有其子级)。