2011-10-17 3 views
1

このアプリケーションでは、ネストされたダイアログを使用しています。最初のダイアログの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()を戻した場合は、他の場所でコンテキスト参照を保持するのと同じリークリスクが発生しますか?

コンテキストではない場合は、何が問題の原因ですか?

答えて

1

コンテキストが異なっている(それはそうであると思われる)かどうかは完全にはわかりませんが、アクティビティからDialog2を開始しようとする前にDialog1を解除していないと思われます。あなたのアクティビティの上でダイアログを開始しようとしているのにDialog1がすでに存在しているため、WindowManagerはおそらく怒っています。

かいつまんで、私はあなたが必要だと思う:

public void onSomeOtherCondition() { 
     this.dismiss(); 
     mActivity.onSomeOtherCondition(); //we have a reference to the activity 
    } 

EDIT

私はコメントで提案された解決策は、あなたがDialog2を作成できるようにmActivity.onSomeOtherConditionにDialog1ののコンテキストを渡すことですスタックの最上部にあるコンテキスト。

+0

ほぼ確実ですが、以前の最初のダイアログの中から2番目のダイアログを開くことができました(この例では、 'Dialog1'の中から' Dialog2'を作成します:問題はありません)。私たちはできるだけ元のものを開いたままにしておきたいと思います。その場合、2番目のものは「読み込み中...」タイプのダイアログです。これが私が文脈に興味を持ち、それが何をするのかという理由です!しかし、ありがとう:) –

+0

私は、アクティビティに 'Dialog'オブジェクトのスタックを保ち、トップのものから' getContext() 'を確実にする必要があると思います...? –

+1

また、コンテキストをonSomeOtherConditionに渡すだけで、ダイアログを作成することもできます。それはおそらくもっと簡単です。 –

1

ダイアログ1(アクティビティ1ではない)がアクティビティスタックの最上部にあるため、ダイアログ1が表示されているときに、アクティビティ1からダイアログ2を開始する際に問題があると思われます。私は決して専門家ではありませんが、アクティビティスタックの一番上にあるアクティビティだけが新しいアクティビティを開始できると考えられます。

+0

これは、アクティビティではなく、ビューですが、それはあなたが描いている行に沿ったものと思われます。 –

+1

実際には技術的に正しいとは言え、ダイアログは 'View'でも' Activity'でもありません。それらは 'java.lang.Object'の直接のサブクラスです – slayton

+0

私は修正されました:) –

関連する問題