このアプリケーションでは、ネストされたダイアログを使用しています。最初のダイアログのgetContext()
メソッドから別のダイアログの上にあるダイアログを作成しました。だから、:Dialog.getContext()とダイアログを作成したアクティビティに違いはありますか?
活動:
//...
Dialog1 dialog = new Dialog1(this);
dialog.show();
//...
Dialog1の:
//...
Dialog1(Context context) {
super(context);
//etc.
}
public void onSomeCondition() {
Dialog2 dialog2 = new Dialog2(getContext());
dialog2.show();
//etc.
}
しかし、我々はDialog1のはまだ表示されている間の活動から直接Dialog2を起動したい事情があります。そこで、このメソッドをアクティビティに配置します:
public void onSomeOtherCondition() {
Dialog2 dialog = new Dialog2(this); //crunch
dialog.show();
//etc.
}
ウィンドウマネージャはこれをまったく気に入らないのです。それで、getContext()
は実際にはアクティビティのContextWrapper
と同じではありませんか?このセカンダリコンテキストがプライマリコンテキストとどのように正確に一致していて、ダイアログボックスから呼び出すアクティビティにgetContext()
を戻した場合は、他の場所でコンテキスト参照を保持するのと同じリークリスクが発生しますか?
コンテキストではない場合は、何が問題の原因ですか?
ほぼ確実ですが、以前の最初のダイアログの中から2番目のダイアログを開くことができました(この例では、 'Dialog1'の中から' Dialog2'を作成します:問題はありません)。私たちはできるだけ元のものを開いたままにしておきたいと思います。その場合、2番目のものは「読み込み中...」タイプのダイアログです。これが私が文脈に興味を持ち、それが何をするのかという理由です!しかし、ありがとう:) –
私は、アクティビティに 'Dialog'オブジェクトのスタックを保ち、トップのものから' getContext() 'を確実にする必要があると思います...? –
また、コンテキストをonSomeOtherConditionに渡すだけで、ダイアログを作成することもできます。それはおそらくもっと簡単です。 –