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);
}
}