2012-04-15 18 views
1

アクティビティインスタンスを使用していても、コンテキストまたはアプリケーションコンテキストインスタンスを使用しているときにダイアログが表示される可能性があります。 アクティビティインスタンスの代わりにコンテキストを使用してダイアログを表示する

AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
      builder.setTitle(title); 
      builder.setMessage(msg); 

      if (null != positiveLabel) { 
       builder.setPositiveButton(positiveLabel, new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 

         dialog.cancel(); 
         if (null != listener) { 
          listener.onOk(); 
         } 
        } 
       }); 
      } 

      if (null != negativeLable) { 
       builder.setNegativeButton(negativeLable, new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 

         dialog.cancel(); 
         if (null != listener) { 
          listener.onCancel(); 
         } 
        } 
       }); 
      } 

      builder.create().show(); 

は、あなたがしてアクティビティインスタンスせずにダイアログを作成カント、

+0

どこから見ますか? – MByD

答えて

5

問題は、私は最近、あまりにも直面している何かである私にアクティビティインスタンスを使用せずにダイアログを表示するための解決策を与えてくださいすることができます。 getApplicationContext()呼び出しも機能しません。私がこれをしたのは、アクティビティからダイアログを作成し、 "this"つまりそのアクティビティへの参照をパラメータとして渡すメソッドを呼び出すことです。

再利用可能なコンポーネントとして、または複数の場所でダイアログを作成するためのメカニズムとしてこのコードを再利用する場合は、基本アクティビティクラスを作成し、このメソッドを必要に応じてサブクラス化されたアクティビティで使用します。

+0

あなたの提案をありがとう。私はまた、他の場合のために私のアプリで同じをやっている。私は現在のシナリオ私は他の活動の呼び出しから独立したAccessibilityServiceを使用しています。これで、起動時にダイアログを表示し、ダイアログを閉じるときに終了アクティビティを表示する透明アクティビティを開始するアイデアがありました。それは良いアイデアだと私に知らせてくれますか? – Abilash

+2

それはうまくいくでしょうが、そのような場合はなぜ活動をして、それをダイアログのように見せないのですか?これをマニフェストファイル "" – omermuhammed

+0

に追加することでこれを行うことができます。感謝omermuhammed私は同じことを行います – Abilash

21

これは、Contextについて常に覚えておく必要がある重要な事項です。MOSTコンテキストには、Activity contextsApplication contextsの2種類があります。多くのUI関連のクラスでは、Contextが渡されます。これはアプリケーションコンテキストではありません!このような場合は、常にActivity Contextを渡す必要があります。 Toastを除き、他のUIコンポーネントはアプリケーションコンテキストでは動作しません。あなたが関連するアプリケーションであるいくつかのサービスまたはコンポーネントをしたいとき

アプリケーションコンテキストは常に場所マネージャはUIのためなど、テレフォニーマネージャーのように、

を渡され、あなたは常にUI関連のあるコンテキストを渡す必要がありますアクティビティ。 【少なくともアンドロイド2.1でいくつかの理由

0

トーストは、アプリケーションコンテキストにすることができるが、

MyActivity.thisダイアログ進行が

MyActivity.getApplicationContextをクラッシュしない活動、特定のコンテキストではありません()はグローバルであり、プログレスバーやそれ以降のバージョンではトーストもクラッシュします。

関連する問題