Android executePendingTransaction的递归项

Android executePendingTransaction的递归项,android,recursion,android-fragments,fragmentmanager,Android,Recursion,Android Fragments,Fragmentmanager,简言之,我有这样的结构: class AlbumPickerFragment extends PageFragment { ... @Override public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInsta

简言之,我有这样的结构:

class AlbumPickerFragment extends PageFragment {

...

    @Override
    public void onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mCallback.onViewCreated(this);
    }


}


public class PlaylistPickerActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        FragmentCreatedCallback callback = new FragmentCreatedCallback();
        if (savedInstanceState == null) {
            mFragments.add(PageFragment.newInstance(PageFragment.ALBUM_FRAGMENT_TYPE, callback));
            mAdapter = new PagerAdapter(getSupportFragmentManager(), mFragments);
            mPager.setAdapter(mAdapter);
        } else {
            restoring = true;
        }
    }


    Callback extends ICallback {

           public void onViewCreated(final Fragment fragment) {
                  mFragments.add(fragment);
                  mAdapter = new PagerAdapter(getSupportFragmentManager(), mFragments);
                  mPager.setAdapter(mAdapter);
           }
    }
我得到了非法状态异常:执行PendingTransaction的递归条目。我知道如何修复它,但我只是好奇为什么会发生这种情况。在我看来是这样的:

  • 在活动的onCreate中,我创建了片段并将其传递给 寻呼机适配器
  • FragmentManager调用fragment的onCreateView

  • 我调用了onViewCreated并将片段传递给寻呼机的适配器 再一次,我想它又到了第二步

  • 但我只是好奇为什么会发生这种情况


    你没有正确使用碎片。现在,首先构建
    ViewPager
    及其包含片段的适配器。问题在于,在这些片段中,您有一个回调,它会触发一个新的适配器,该适配器将使用相同的片段在
    ViewPager
    上设置。由于流程中已经有一个事务,因此尝试在流程中创建另一个事务将不起作用

    你的代码没有多大意义。您有一个带有片段的
    ViewPager
    ,当
    ViewPager
    在其
    onCreateView()
    方法中构建这些片段时,您将调用一个回调,该回调在同一
    ViewPager
    上设置一个新适配器,该适配器将包含
    ViewPager
    正在添加的片段。另外,请不要在你的问题标题前加Android,底部的标签已经足够了。我知道,这是一点伪代码:这就是我最后得到的,我的意思是呼叫层次结构。我说的对吗?FragmentManager->creates Fragment view->因为在同一个ViewPager上设置了新的适配器,FragmentManager试图再次添加此片段(它现在正在添加它,所以我们得到了递归)诸如此类的东西,您正在尝试使用已包含在事务中的片段执行事务。非常感谢!你真的应该把它作为一个答案,这样我就可以把它标记为有用的。