12

アプリをアップグレードして、support lib rev. を使用するようにしました。11をSDK 4.2に対してコンパイルすると、次のエラーが表示されます。

java.lang.IllegalStateException: Fragment already added: i{4079e598 #2 id=0x1020002 i}
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1159)
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:729)
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1493)
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:477)
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:174)

stackoverflow で同様の問題について読んだことがあります。それらのいくつかは、私が使用していない置換方法を避けることを提案しています。ロールバック時にクラッシュを引き起こすトランザクションは次のようになります。

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit()

他のコメントによると、ユーザーがもう一度押す前に十分な速さで終了できないフラグメント遷移を使用している場合に、これが発生する可能性があります。特定のフラグメントで遷移アニメーションを使用しているため、これが原因である可能性があります。ただし、移行を削除することは選択できません。これは2.3.x を実行している電話でのみ発生し、lib 11 と SDK 4.2 にアップグレードすることでバグが導入されたため、Google が次のリリースで修正することを願っています.

同様の問題、これが 4.2.1 で修正される予定か、r12 をサポートする予定かに関する情報、またはエラーを回避するために私ができることの提案はありますか?

4

2 に答える 2

7

ここで見つけたヒントを使用して問題を修正しようとしています

そこで、 executePendingTransactions()を追加して、トランザクションをすぐに実行しました。

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit()
getFragmentManager().executePendingTransactions();

これにより、バックスタックが常にクリーンな状態になり、考えられるマイナスの欠点がなくなるはずです。

更新 通常の電話では機能しますが、この問題は、4.0.1などの既知のAndroidバージョン番号を持たない一部の汎用デバイスで発生しますが、代わりに'Thu Mar 02 200600:00:00GMTなどの日付を報告します。 Androidバージョン番号として+0100(MEZ)'、例:samsung --espressowifixx --GT-P3110は、指定された日付をAndroidバージョンとして報告し、フラグメントが追加された例外を生成します...それでも迷惑です。ユーザーはこのようなことを気にしないので、責任を問われるのは常にすでに不足している開発者です。もちろん、10億ドル規模の企業にとっては問題ありませんが、単一の開発者は、アプリを作成するよりも、時間を使ってもっと役立つことをするだけです;)

于 2013-01-12T21:54:47.227 に答える
6

だから私にとっては、実際にフラグメントを2回追加しようとしていたことがわかりました。たぶん、以前のサポートライブラリバージョンでは、これを飲み込んで先に進みました。残念ながら、フラグメントisAdded()が機能しなかったかどうかを確認しても、トランザクションが実際に最初のフラグメントを追加する前に、フラグメントを連続して呼び出していたためです。

最終的には、ブールクラス変数を作成しfragmentAdded、トランザクションを実行した直後にそれをtrueに設定しました。次に、フラグメントを追加する前に、このブール値を確認します。あなたの問題の解決策ではないかもしれませんが、私にとっては解決策だったので、うまくいけばそれが役立つでしょう。

于 2012-12-21T16:24:17.390 に答える