【发布时间】:2014-06-19 20:19:10
【问题描述】:
它看起来像是possible to get all fragments of an Activity pretty easily。但是如何获取给定片段的所有子片段?
这个问题也和getParentFragment API 16有关
【问题讨论】:
标签: android android-fragments android-nested-fragment
它看起来像是possible to get all fragments of an Activity pretty easily。但是如何获取给定片段的所有子片段?
这个问题也和getParentFragment API 16有关
【问题讨论】:
标签: android android-fragments android-nested-fragment
你可以用同样的方法来做——只需使用通过Fragment实例的getChildFragmentManager()而不是ActivityFragmentManager获得的FragmentManager。当然,这假设您使用的是支持库的重新编译版本,其中 getFragments() 未隐藏,或者正在使用反射来调用该方法。
【讨论】:
以下解决方案并不完美,但在一定程度上可行:
这里是解决方案。 MyActivity 类如下所示。
public static Fragment getParentFragment(Fragment fragment) {
if( Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN)
return fragment.getParentFragment();
MyActivity activity = (MyActivity)fragment.getActivity();
List<Fragment> fragmentList = activity.getActiveFragments();
if( fragmentList.contains( fragment) ) {
return null;
}
for( Fragment fragmentLevel1 : fragmentList ) {
if( fragmentLevel1.getFragmentManager() == fragment.getFragmentManager() ) {
return fragmentLevel1;
}
}
//this is not supposed to happen, it might be better to throw an exception
return null;
}
MyActivity 基于的位置:Is there a way to get references for all currently active fragments in an Activity?
public class MyActivity {
List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>();
@Override
public void onAttachFragment (Fragment fragment) {
fragList.add(new WeakReference(fragment));
}
public List<Fragment> getActiveFragments() {
ArrayList<Fragment> ret = new ArrayList<Fragment>();
for(WeakReference<Fragment> ref : fragList) {
Fragment f = ref.get();
if(f != null) {
if(f.isVisible()) {
ret.add(f);
}
}
}
return ret;
}
}
【讨论】: