递归进入executePendingTransaction

时间:2013-09-03 18:48:59

标签: android recursion android-fragments fragmentmanager

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

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);
           }
    }

我得到illegal state exception:递归进入executePendingTransaction。我知道如何解决它,但我只是好奇为什么会发生这种情况。在我看来,它是这样的:

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

  3. 我调用了onViewCreated并将我的片段传递给了pager的适配器         再次,我想它会再次进入第2步。

1 个答案:

答案 0 :(得分:2)

  

但我很好奇为什么会这样。

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