2

まず、フラグメントを使用するためにサポート ライブラリ (android-support-v4.jar) を使用しています。

フラグメントを含むレイアウトのアクティビティがあります。したがって、アクティビティが開始されると、フラグメントの onCreateView メソッドが呼び出されます。このメソッドでは、レイアウト (linearlayout とリストビューを含む) を膨張させ、その膨張したビューを返します。

したがって、アクティビティが開始されると、リストビューが読み込まれ、Web サービスが呼び出され、Web サービスに応答してリストビューにデータが読み込まれます。

すべてが期待どおりに完璧に機能します。しかし、問題は、戻るボタンを押してアクティビティを再起動すると、フラグメントがアクティビティにアタッチされず、getActivity() を呼び出そうとすると IllegalStateException がスローされることです。また、フラグメントの getView() メソッドを呼び出そうとすると NullPointerException がスローされます。

TraceView ツールからビュー階層を見ると、そこにフラグメント ビューが表示されます。

私を助けてください!

4

1 に答える 1

0

私は問題を理解したので、それも解決しました。Observer インターフェイスを使用して、Web サービスからの応答を取得していました。そのため、最初にアクティビティを開始したときに、フラグメントアクティビティを Observable クラスに追加 (または登録) し、応答を受け取りましたが、フラグメントオブジェクトが破棄されたときにフラグメントオブジェクトを削除 (または登録解除) するのを忘れていました。したがって、アクティビティとフラグメントが再起動すると、再びフラグメント オブジェクトが Observable クラスに追加されるため、Observable クラスにはフラグメントの 2 つのインスタンスが存在するようになり、最初の 1 つが破棄され、現在のフラグメントと Web サービスが呼び出され、最初に破棄されたフラグメントで応答し、その時はクラッシュします。そのため、フラグメントの onDestroy メソッドの Observable クラスからフラグメント インスタンスを削除したところ、現在は機能しています。

したがって、問題はフラグメントではなく、フラグメントの複数のインスタンスにあります。

于 2013-04-12T17:04:12.507 に答える