2017-01-11 11 views
0

私は私のBlankfragment.javaこれはblankFragment.java内部メソッドですアンドロイドは -

内のメソッドに、別の静的なJavaクラスから文字列を渡すためにしようとしているが、問題がある静的メソッドからトーストを作ります静的でないgetContext()にはアクセスできないことに注意してください。

public static void ShowMessage(String message){ 
    Toast.makeText(getContext() ,message , Toast.LENGTH_LONG).show(); 
} 

そして別の静的 Javaクラスのメソッドの呼び出し:

BlankFragment.ShowMessage(new String(body)); 

外部からコンテキストを取得し、それをパラメータとして渡す方法はありますか? getContext()が機能せず、「シンボルを解決できません」というエラーが表示される

+0

はいのgetActivity()を使用して試すことができます。 paramを 'showMessage(文字列メッセージ、コンテキストコンテキスト)'として構造化します。メソッドを呼び出すときに、 '.showMessage(new String(body)、getApplicationContext())'が呼び出されます。フラグメントについては、 'getContext()'を使用してください。 –

答えて

5

コンテキストをパラメータとして渡すことができます。これは断片なので、ヌルをチェックすることをお勧めします!

public static void ShowMessage(Context context, String message){ 
    if (context == null) return; 
    Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 
} 

BlankFragment.ShowMessage(getContext(), new String(body)); 

注:

私はがちょうどフラグメントで働いていると私は絶対に彼らのライフサイクルを憎みます。私はコンテキストを含む静的メソッドがなぜ必要なのかは完全にはわかりませんが、私はそれに対して推奨します。むしろCommand patternなどを使用してください。通常、私は、フラグメントが "落ち着く"まで、コンテキストが利用可能になることを発見します。

+0

次のコール:BlankFragment.ShowMessage(getContext()、new String(body));別のjavaclassから呼び出されるので、そこからそのメソッドにアクセスすることはできません。単に「cant resolve symbol」というエラーが発生します – Jon

+0

Fragmentクラスのメソッドを使用している場合は、 Fragmentクラス内のActivityに到達できる必要があります。 –

+0

私はBlankFragment.ShowMessage(getContext()、new String(body))を呼び出しています。 fromは、rabbitmq defaultconsumerインタフェースを実装する静的Javaクラスです。そのフラグメントやアクティビティではありません。 – Jon

0

フラグメントをこのメソッドを使用している(またはそれから呼び出す)場合、フラグメントはアクティビティへのアクセス権がgetActivity();です。パラメータとして渡します。

しかし、あなたが実際にフラグメント(表示トーストメッセージ)内の方法を使用している場合は、代わりにgetContext().

+0

私はBlankFragment.ShowMessage(getContext()、new String(body))を呼び出しています。 RabbitMQデフォルトのコンシューマを実装する静的Javaクラスから取得します。 – Jon