У меня есть фрагмент, содержащий 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);
}
}