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的递归条目。我知道如何修复它,但我只是好奇为什么会发生这种情况。在我看来是这样的:
你没有正确使用碎片。现在,首先构建
ViewPager
及其包含片段的适配器。问题在于,在这些片段中,您有一个回调,它会触发一个新的适配器,该适配器将使用相同的片段在ViewPager
上设置。由于流程中已经有一个事务,因此尝试在流程中创建另一个事务将不起作用 你的代码没有多大意义。您有一个带有片段的ViewPager
,当ViewPager
在其onCreateView()
方法中构建这些片段时,您将调用一个回调,该回调在同一ViewPager
上设置一个新适配器,该适配器将包含ViewPager
正在添加的片段。另外,请不要在你的问题标题前加Android,底部的标签已经足够了。我知道,这是一点伪代码:这就是我最后得到的,我的意思是呼叫层次结构。我说的对吗?FragmentManager->creates Fragment view->因为在同一个ViewPager上设置了新的适配器,FragmentManager试图再次添加此片段(它现在正在添加它,所以我们得到了递归)诸如此类的东西,您正在尝试使用已包含在事务中的片段执行事务。非常感谢!你真的应该把它作为一个答案,这样我就可以把它标记为有用的。