简而言之,我有这样的结构:
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。我知道如何解决它,但我只是好奇为什么会发生这种情况。在我看来,它是这样的:
FragmentManager调用片段的onCreateView
我调用了onViewCreated并将我的片段传递给了pager的适配器 再次,我想它会再次进入第2步。
答案 0 :(得分:2)
但我很好奇为什么会这样。
您没有正确使用这些碎片。现在,您首先构建ViewPager
及其包含片段的适配器。问题是,在这些片段中,您有一个回调,它会触发使用相同片段在ViewPager
上设置的新适配器。由于您已经在流程中拥有了一个交易,因此尝试在流程中创建另一个交易将无效。