Отобразить пейджер фрагмента внутри фрагмента

У меня есть фрагмент, содержащий ViewPager. ViewPager связан с адаптером, который содержит набор фрагментов.

После загрузки родительского фрагмента я обнаружил IllegalStateException с сообщением: java.lang.IllegalStateException: Рекурсивная запись для 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);
    }
}

55
задан Community 23 May 2017 в 12:17
поделиться