我有一个包含ViewPager的片段。ViewPager与包含一组片段的适配器关联。
加载父片段后,我IllegalStateException看到一条消息:java.lang.IllegalStateException: Recursive entry to executePendingTransactions。
一些研究使我得出这样的结论:系统无法显示另一个片段中的片段,但是似乎有迹象表明,使用ViewPager可以完全做到这一点(ViewPager中的错误与其他片段一起使用))。
实际上,如果我向父片段添加一个按钮,该按钮mPager.setAdapter(mAdapter)在按下时会调用ViewPager,则ViewPager将成功加载。这是不理想的。
然后,问题必须与片段生命周期有关。因此,我的问题是:还有其他人找到解决此问题的方法吗?
有什么方法可以将ViewPager上的适配器的设置延迟到片段事务之后?
这是我的父片段代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.team_card_master, container, false);
mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager);
final Button button = (Button)mView.findViewById(R.id.load_viewpager_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mViewPager.setAdapter(mAdapter);
button.setVisibility(View.GONE);
}
});
mAdapter = new ViewPagerAdapter(getFragmentManager());
// mViewPager.setAdapter(mAdapter);
return mView;
}
和适配器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
if (mCursor == null) return 0;
else return mCursor.getCount();
}
@Override
public Fragment getItem(int position) {
Bundle b = createBundle(position, mCursor);
return TeamCardFragment.newInstance(b);
}
}
相关分类