我有一个FragmentPagerAdapter,其中有几个片段,这些片段在运行时根据用户设置而动态创建。替换FragmentPagerAdapter中的部分片段
根据这些用户设置,应将每个片段的一部分替换为另一个片段(有时应将一个进度条添加到该片段中,有时不需要)。
这是我的替换代码:
OverviewProgressElementFragment fragment = new OverviewProgressElementFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.pBarContainer, fragment);
ft.commit();
的问题是,这条线FragmentTransaction ft = getFragmentManager().beginTransaction();
导致此异常:
10-18 17:51:57.822: E/AndroidRuntime(1877): FATAL EXCEPTION: main
10-18 17:51:57.822: E/AndroidRuntime(1877): java.lang.NullPointerException
10-18 17:51:57.822: E/AndroidRuntime(1877): at com.xxx.xxx.OverviewEntityFragment.SetEntity(OverviewEntityFragment.java:119) <- the method in which I call the transaction
10-18 17:51:57.822: E/AndroidRuntime(1877): at com.xxx.xxx.PageAdapter.getItem(PageAdapter.java:27)
10-18 17:51:57.822: E/AndroidRuntime(1877): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
10-18 17:51:57.822: E/AndroidRuntime(1877): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
10-18 17:51:57.822: E/AndroidRuntime(1877): at android.support.v4.view.ViewPager.populate(ViewPager.java:982)
我的层次结构是以下内容:含有
MainActivity FragmentTabHost
> FragmentPagerAdapter - - 含ViewPager
一个突>片段
片段应该部分地加载在第3部分 '亚片段' 动态
错误occures当片段改掉替换内容。
这里是我的FragmentPagerAdapter片段创建代码:
@Override
public Fragment getItem(int position)
{
OverviewEntityFragment oeFragment = new OverviewEntityFragment();
oeFragment.SetEntity(_entityList.get(position));
return oeFragment;
}
例外occures在SetEntity()
- 方法。这是代码:
public void SetEntity(OverviewEntityData entityData)
{
_entityData = entityData;
if ((_entityData.getEntityType() != ENTITY_TYPE.MEMORY)
&& (_entityData.getEntityType() != ENTITY_TYPE.NO_PAGE_FOUND))
{
OverviewProgressElementFragment fragment = new OverviewProgressElementFragment();
fragment.SetEntityData(_entityData);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.pBarContainer, fragment);
ft.commit();
}
}
的异常也occures时,我只是写:
public void SetEntity(OverviewEntityData entityData)
{
FragmentTransaction ft = getFragmentManager().beginTransaction();
}
是没可能取代片段的部分在这样的层次结构还是我做错了什么?
任何帮助真的很感激。
编辑:
我试图用getChildFragmentManager()
但是,这将引发以下异常:
10-18 19:02:48.622: E/AndroidRuntime(2056): FATAL EXCEPTION: main
10-18 19:02:48.622: E/AndroidRuntime(2056): java.lang.IllegalStateException: Activity has been destroyed
10-18 19:02:48.622: E/AndroidRuntime(2056): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1358)
10-18 19:02:48.622: E/AndroidRuntime(2056): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
10-18 19:02:48.622: E/AndroidRuntime(2056): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
10-18 19:02:48.622: E/AndroidRuntime(2056): at com.xxx.xxx.OverviewEntityFragment.SetEntity(OverviewEntityFragment.java:121)
10-18 19:02:48.622: E/AndroidRuntime(2056): at com.xxx.xxx.PageAdapter.getItem(PageAdapter.java:27)
10-18 19:02:48.622: E/AndroidRuntime(2056): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
感谢您的回答,但在我的Fragment中使用getChildFragmentManager()会引发另一个异常。我更新了我原来的帖子。 – user1567896