0

ユーザー設定に応じて実行時に動的に作成されるいくつかのフラグメントを持つ 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. FragmentTabHost を含む MainActivity

  2. ViewPager -> FragmentPagerAdapter -> Fragments を含む 1 つのタブ

  3. 「サブフラグメント」を部分的に動的にロードする必要があるフラグメント

フラグメントがコンテンツを置き換えようとすると、パート 3 でエラーが発生します。

FragmentPagerAdapter のフラグメントの作成コードは次のとおりです。

@Override
public Fragment getItem(int position) 
{
    OverviewEntityFragment oeFragment = new OverviewEntityFragment();
    oeFragment.SetEntity(_entityList.get(position));
    return oeFragment;
}   

メソッドで例外が発生し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();            
    }
}

次のように書いたときにも例外が発生します。

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)
4

1 に答える 1