[解決済み] FragmentManagerはすでにトランザクションを実行しています。コミット後にページャーを初期化するのはいつが安全ですか?
質問
2つのフラグメントをホストするアクティビティがあります。アクティビティはオブジェクトをロードしている間、ローダーを表示することから始まります。ロードされたオブジェクトは、newInstanceメソッドを介して引数として両方のフラグメントに渡され、それらのフラグメントが添付されます。
final FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.container1, Fragment1.newInstance(loadedObject));
trans.replace(R.id.container2, Fragment2.newInstance(loadedObject));
trans.commit();
2番目のフラグメントは、android.support.v4.view.ViewPagerとタブを含んでいます。
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount()); //the count is always < 4
tabLayout.setupWithViewPager(viewPager);
問題は、android が次のように投げることです。
java.lang.IllegalStateException: FragmentManagerはすでに実行中です。 トランザクション
このスタックトレースで
(私は
android.support
をパッケージ名から取り除きました)
v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1620) で v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)にて。 at v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at v4.view.ViewPager.populate(ViewPager.java:1235)にて。 at v4.view.ViewPager.populate(ViewPager.java:1083)にて。 at v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:847)にて確認できます。
このデータでは、もし
setOffscreenPageLimit(...);
が削除されます。この問題を回避する他の方法はありますか?
ページャーをセットアップするのを待つことができるように、ライフサイクルの中でいつフラグメントトランザクションが完了するのでしょうか?
どのように解決するのですか?
sdk24以上をターゲットにしている場合は、使用できます。
FragmentTransaction.commitNow()
の代わりに
commit()
古いバージョンを対象にしている場合は、電話をかけてみてください。
FragmentManager.executePendingTransactions()
の呼び出しの後に
commit()
関連
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信