9

ユーザーにデータがない場合、空のフラグメントを表示しています。そのemptyFragment(onViewCreated)では、条件をチェックし、その空のフラグメントを別のものに置き換えることがあります。そのため、フラグメントを置き換えたアクティビティのメソッドを呼び出します。onViewCreated - フラグメントを置き換える場所が間違っていますか?

一部のユーザー(現在はサムスン、6.0.1それが何を意味している場合、私は知らない)私executePendingTransactionsライン上でクラッシュが発生します。

IllegalStateException: 

Fatal Exception: java.lang.RuntimeException 
Unable to resume activity 
{....app.activities.MyActivity_}: 
java.lang.IllegalStateException: FragmentManager is already executing transactions 

が、これは6.0.1のバグですまたはonViewCreatedこれを行うには間違った場所ですか?

EDIT

が、これは可能な解決策でしょうか?

if (addToBackStack) { 
     getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).addToBackStack(name).commitAllowingStateLoss(); 
     getSupportFragmentManager().executePendingTransactions(); 
    } else { 
     getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).commitNow(); 
    } 

答えて

0

あなたがSDK 24を扱っている場合は代わりに、古いバージョンではcommit()

を使用しての、FragmentTransaction.commitNow();を試してみてください:すべてのcommit()

+0

私は最初に 'executePendingTransactions()' – swalkner

4

まずの呼び出し後にFragmentManager.executePendingTransactions():あなたは移動しない理由あなたの活動の「チェック条件」?このようにして、必要なフラグメント(空の値を管理するものか他のもの)を決めることができます。

2番目:フラグメントcommitstate lossについて2つの小さなチュートリアルを読むことをお勧めします。そこにあるフラグメントに関連する多くのエラー条件を見つけることができます。

最後に、 'FragmentManager'に関する回答は既にトランザクションを実行しています:executePendingTransactions()メソッドへの少なくとも2つのネストされた呼び出しがあります。つまり、フラグメントマネージャーに要求していますアクティビティごとに)別のトランザクションを実行している間にトランザクションを実行します。どこに問題があるのか​​を特定するのは難しいので、executePendingTransactionsの呼び出し(最初の呼び出し)を特定して削除するだけで、アクティビティのコードと関連するすべてのコードを投稿する必要がありますが、いくつかのヒントを得ることができます:

  1. executePendingTransactions()は使用しないでください。フラグメント間で一種のオーケストレーションが必要なコードを書くのは難しいです。
  2. アクティビティに追加するフラグメントにすぐにアクセスする必要がない場合は、commit()を使用してください。単純コミットは、メインスレッドが解放されるとすぐにすべてのトランザクションを実行します。
  3. フラグメントにすぐにアクセスする必要がある場合は、commitNow()を使用してください。正直なところ、私はDialogFragmentsを正しく処理するために、このメソッドをほんの数回使用しました。

commitNow()は、support libraryを使用する場合、24個前のデバイスで使用できます。これは採用をお勧めします。

+0

を使用しています:最初に私はデータフラグメントを表示しないので、ネットワークコールが戻ったときに別のものに置き換えたいと思います... – swalkner

+0

executePendingTransactionを削除しようとしましたか? –

+0

私の編集で好きですか? – swalkner

関連する問題