私はフラグメントをインスタンス化してgetItem()メソッドでそれを返すアダプタを備えたviewPagerを持っています。だから私は最初のページに私はわずか2つの断片が生きている。私は電話機を回転させると、それらは破壊されてガベージコレクトされます(システムはonDestroy()とonDetach()をコールし、ガベージコレクションの準備として.hprofメモリダンプでそれらを見ることができます)。しかし、何らかの理由で新しいビューページと2つの新しいフラグメントで新しいアクティビティが作成されると、システムは以前に破棄されたものに対して2つのフラグメントを作成し、アクティビティにアタッチします。彼らはfragmentManagerのmActiveとmAdded配列に座っているだけです。デバイスを数回回転させると、毎回新しいインスタンスが作成されます。今、これは破片がゴミ収集されないようにする漏れのように思えるかもしれませんが、実際にはそうです。これらのフラグメントはすべて、異なる@xxx番号を持ち、新しいフラグメントマネージャ内の新しいアクティビティにアタッチされます。私はすべてを試しました、どんな助けや提案も感謝しています、ありがとう!フラグメンテーションと自分自身でのアクティビティの追加
答えて
ViewPagerは、それが示すフラグメントのライフサイクルを処理します。あなたが言及しているように、時間が来たらスムーズにスワイプできるように、目に見えるフラグメントとそれの隣にあるもの(FragmentStatePagerAdapter
と一緒に使用される場合)を作成します。フラグメントが見えなくなったら、その意志でViewPager
によって破壊され再現されます。
回転スクリーンのデフォルトのビヘイビアは、アクティビティがViewPager
とFragments
と共に再作成されていることです。 これは変更できます。 android:configChanges="orientation"
をマニフェストで使用すると、方向変更時に再作成されることを防ぐことができます。 方向変更時にフラグメントインスタンスを保存するもう1つの方法は、保持するフラグメント内のsetRetainInstance(true)
を呼び出すことです。
まあ私の場合はほとんど何が起こる。私は最初のページを見て、私は画面を回転させる。活動が破壊され、断片が破壊される。新しいフラグメントマネージャーで作成された新しいアクティビティーと、新しいアダプターで新しいビューパーガー。現在、フラグメントマネージャは2つの新しいフラグメントを作成し、それらをアクティビティとviewPagerのアダプタに追加します。これまでのところうまくいきましたが、FragmentManagerは2つのフラグメントをさらに作成し、ビューページのアダプタに追加することなくそれらをアクティビティにのみ添付します。今度は4つの断片があります。私が再び回転すると、2つの正常な断片と4つの断片が作成されます。 –
断片の古い破棄されたインスタンスは見ていませんか? – Juan
私はこの断片のonCreateViewにbreakpiontを入れました。最初に私は2度呼ばれる活動に入る。最初の回転の4回後、次に6回の回転の後など。これらの断片は捨てられる。彼らの場所では、常に同じ数のクレタートが追加され、さらに2つが追加されてユーザーに表示されます –
私はそれが(予期せず:D)悪いコードでした。 ActivityのonRestoreInstanceState()に、新しいアダプタを作成して設定していたコードがあり、古いフラグメントがバックグラウンドに置かれていました。答えられない質問で迷惑を掛けて申し訳ありません。
- 1. Leaflet.jsのベースマッププロバイダとして自分自身を追加する
- 2. Makefileが自分自身をターゲットとして追加する
- 3. 自分自身
- 4. Ag-grid fullWidthCellRendererFramework自分自身のプロパティを追加
- 5. javascriptで乱数を自分自身に追加する
- 6. 自分自身にdata.frameを追加できますか?
- 7. Cufonがすべてに自分自身を追加する
- 8. Tkinterフレームがメインウィンドウに自分自身を追加する
- 9. 自分自身をSQL Serverに追加するには?
- 10. acme.shのチャレンジエラーと自分自身のボルダーサーバー
- 11. UIViewControllerがUINavigationControllerに自分自身を追加することができます
- 12. SqlAlchemyのオブジェクトの永続性 - データベースに自分自身を追加する
- 13. Objective-Cブロックと自分自身をキャプチャ
- 14. どのようにvdhlコードを自分自身にテキストを追加する
- 15. GitHubページに自分自身のjekyllテーマを追加するには?
- 16. なぜこのPHPオブジェクトはアイテムを自分自身に追加しますか?
- 17. 自分自身のディレクトリ内のUnauthorizedAccessException
- 18. 自分自身のPHP mvcフレームワークのhtaccess
- 19. 自分自身への参照wsdl url
- 20. Spring MVC +自分自身のセキュリティモデル
- 21. 自分自身の「並べ替え」ボタン
- 22. Netlogo if自分自身と他の人との声明
- 23. クラスは自動的に自分自身の友人ですか?
- 24. PHPで自分自身の自動インクリメントを作る方法は?
- 25. 自分自身にテーブルに参加する
- 26. 自分自身を返すRubyメソッド
- 27. MySQL自分自身にテーブルを結合
- 28. 自分自身を削除するスクリプト
- 29. ログインフォーム自分自身に戻ってリダイレクト
- 30. 自分のニュースフィードを自分のアプリケーションに追加する
これは、ViewPagerの動作方法です。あなたの質問は何ですか? – Juan
よく私は同様の方法で使用する他のviewPagesを持っています、そして、彼らはそれをしません。表示されているフラグメントとその隣にあるフラグメントだけが常に存在します。しかし、私は携帯電話を回転させると、それらはすべて破壊され、再作成されません。つまり、viewPagerは、画面の回転ですべてのフラグメントを破棄する必要があるため、おそらく期待どおりに動作します。私はちょうどundestをしないでくださいなぜ彼らは目的なしに再作成されている –