1

ActionBarSherlock と ViewPager を使用して、SherlockFragmentActivity のタブ ページとして 4 つのフラグメントを使用していました。

通常の状態では、このソリューションは正常に機能しました。

ただし、アプリケーションが異常終了した場合、つまり、メモリ不足のために Android OS によって強制終了された場合、ViewPager は、SherlockFragmentActivity に戻るときに、新しく作成されたフラグメントをアクティビティに追加できませんでした。

多くのデバッグを行った結果、最終的に、SherlockFragmentActivity がそれに接続されたフラグメントを「記憶」していることに気付きました。再作成されると、フラグメントを再作成してそれ自体にアタッチするため、ViewPager は新しいフラグメントをアクティビティにアタッチできませんでした。

SherlockFragmentActivity#onSaveInstanceState を空の実装で上書きして、SherlockFragmentActivity にすべてのフラグメントを強制的に忘れさせることで、この問題を回避しました。しかし、私はまだ完璧な解決策を持っていません。

これは SherlockFragmentActivity の欠陥ではないかと思いました。

まとめると、SherlockFragmentActivity は、ViewPager を操作すると内部フラグメントが復元されるという欠陥があると思います。

誰かが同じ問題に遭遇しましたか?

4

2 に答える 2

0

あなたが言ったことに基づいて、ここにバグの証拠はほとんどありません。あなたのソリューションは、広く使用されている優れたソリューションです。

しかし、私はあなたの分析に疑問を呈したいと思います。フラグメントが静的 (XML) の場合、Android はそれらを自動的に再作成します。ただし、フラグメントを動的に作成している場合 (タブを使用している場合はそうなっていると思います)、アクティビティが破棄された後、Android システムはフラグメントを自動的に再作成しません。この場合、onSaveInstanceState を使用して、フラグメント/タブをプログラムで復元する必要があります。

構成変更の問題について言及していませんが、ABS を使用している場合は、アプリで構成変更を処理しようとしないでください。これは、ABS の使用中に遭遇した「標準」からの唯一の逸脱です。

ここで高品質の応答を探している場合は、コードと logcat トレースを投稿することをお勧めします。

于 2013-07-29T01:24:20.603 に答える