0

我有一个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) 

我的层次结构是以下内容:含有

  1. MainActivity FragmentTabHost

  2. > FragmentPagerAdapter - - 含ViewPager
  3. 一个突>片段

  4. 片段应该部分地加载在第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) 

回答

0

里面一个FragmentActivity你应该叫getSupportFragmentManager(),而不是getFragmentManager()

而在嵌套Fragment呼吁getChildFragmentManager()

编辑:

当您创建片段:

OverviewEntityFragment oeFragment = new OverviewEntityFragment(); 

该片段尚未连接到Activity,因此例外。

我猜你可以通过FragmentManagerSetEntity()方法,但我不知道如何解决这个问题。

+0

感谢您的回答,但在我的Fragment中使用getChildFragmentManager()会引发另一个异常。我更新了我原来的帖子。 – user1567896