У меня есть фрагмент, который содержит ViewPager.ViewPager связан с адаптером, который содержит набор фрагментов.
При загрузке родительского фрагмента меня встречает IllegalStateException
с сообщением: java.lang.IllegalStateException: Recursive entry to executePendingTransactions
.
Некоторые исследованияпривел меня к выводу, что система не может отображать фрагменты внутри другого фрагмента, ОДНАКО, кажется, есть некоторые признаки того, что это можно сделать именно с помощью ViewPager ( Ошибка в ViewPager при использовании его с другимифрагмент ).
Фактически, если я добавлю кнопку к своему родительскому фрагменту, которая при нажатии вызывает на моем ViewPager mPager.setAdapter(mAdapter)
, 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);
}
}