2011-01-14 9 views
1

単純なメッセージポップアップを扱うクラスを作ったので、アプリケーション全体でコードを再利用できます。私は文脈の権利を得ることができないようである。これは、どこからでも呼び出され、多くの場合、UIを直接持たないクラスから呼び出されます。下の行を参照してください...どのようにCONTEXTを指定しますか

答えて

2

Contextをパラメータとして渡すことは可能ですか?

あなたはコンテキストなしで作業を行っている
public void msghand(String message, Exception e, Context context) { 
    ... 
    new AlertDialog.Builder(context) 
    ... 

?サービスにはUIはありませんが、まだコンテキストがあります。

編集:

あなたは静的にアクセス可能で、アプリケーションの起動時に作成した小さなメッセージサービスを作成することができます。たとえば:

class MyActivity extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     // create the Message service that can be statically accessed 
     s_MessageService = new MessageService(getApplicationContext()); 
     ... 
    } 

    public static MessageService getApplicationMessageService() 
    { 
     return s_MessageService; 
    } 

    private static MessageService s_MessageService; 
} 

MessageServiceが実装されている場合は、適切

class MessageService 
{ 
    public MessageService(Context messageContext) 
    { 
     m_MyContext = messageContext; 
    } 

    public msghand(String message, Exception e) 
    { 
     // exactly the same as before, except using the stored context 
    } 

    Context m_MyContext = null; 
} 

あなたDBHelperクラスは、それ自体、 "アクティビティ" をする必要もありません

MyActivity.getApplicationMessageService().msghand(...); 
+0

私はこれに最初に渡されたコンテキストを持っていましたが、私がこれを呼び出したい場所のいくつかは、DBHelperのようなクラスだけであり、UIを持っていません。 –

+0

この問題を解決する方法を示すために私の答えを編集しました。あなたのアプリケーションに合った方法で実装することをお勧めします。これは単なる例です。おそらく、ここのAndroid Gurusが説明できるより良いパターンがあります。 – WorkerThread

+0

WOWはすべての助けに感謝します。私はこれを読む前に正しい軌道に乗っていましたが、私がやっていたことを正確には確認できませんでした!ありがとう、これは素晴らしい作品です! –

0

コンテキストをmsgクラスのコンストラクタのパラメータとして追加し、それを使用しているアクティビティから継承します。

+0

を経由して、それを使うだろうか? public class xtz extends Activity()と同様ですか? –

関連する問題