2

これが以前に尋ねられた場合は申し訳ありませんが、私の特定のケースに対する答えが見つかりませんでした。また、私が新しくて少し愚かであることを申し訳ありません。

問題: フラグメントからダイアログを表示し、コンストラクター メソッドでコンテキストを渡しています。これは、ブロードキャスト受信者などに登録するためにダイアログにコンテキストが必要なためです。

DialogFragment fragmentDialog = MyDialog.myConstructor(getActivity());
fragmentDialog.show(getFragmentManager(), "dialog");

次に、MyDialog クラスで、コンテキストをインスタンス変数に格納します。デバイスを回転させると問題が発生し、ダイアログでコンテキストを再度使用しようとすると nullPointerException が発生します。

これは簡単な方法で解決できますか?

4

4 に答える 4

2

デバイスが回転すると、アクティビティは破棄されて再作成されます。したがって、Fragment に渡した Context は、破棄された Activity を指しています。

フラグメントでsetRetainInstance(true)を使用できます。このようにして、フラグメントはアクティビティの再作成後も存続します。

アクティビティが再作成された場合、NPE を解決するには、コンテキストをフラグメントに渡す必要があります。次に、コンテキストは新しいアクティビティに属します。

実際、この更新を行わないと、getActivity() や getFragmentManager() などのアクティビティを指すすべてのコード行で NPE が発生します。

于 2013-07-25T20:42:52.553 に答える
1

画面を回転すると、アクティビティが破棄されて再作成されるため、NullPointerException が発生します。

以下のSO投稿は詳細情報を提供します...

https://stackoverflow.com/a/1673374/

于 2013-07-25T19:42:01.293 に答える
0

初期化で行っていることによっては、Application を拡張する新しいクラスを作成し、初期化コードをそのクラス内のオーバーライドされた onCreate メソッドに移動することを検討できます。

public class MyApplicationClass extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    // TODO Put your application initialization code here.
  }
}

そして、あなたは愚かではありません。専門家でさえ、時々助けが必要です。

于 2013-07-25T20:24:30.340 に答える