2017-01-11 28 views
0

我想從一個單獨的靜態Java類傳遞一個字符串,一種方法,我Blankfragment.javaAndroid的 - 從靜態方法制作吐司

這是blankFragment.java裏面的方法中,問題是它不能訪問非靜態的getContext()。

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

而在單獨靜態 Java類方法調用:

BlankFragment.ShowMessage(new String(body)); 

有沒有辦法從外部獲取上下文並將其作爲參數傳遞? getContext()不起作用,我得到錯誤「無法解析符號」

+0

是。將你的參數構造爲'showMessage(String message,Context context)'。當調用方法時,'.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調用,所以我沒有從那裏訪問該方法,我只是得到了錯誤「無法解析符號」 – Jon

+0

如果您在片段類中使用方法,請嘗試檢查我的答案...你應該能夠到達Fragment類中的Activity。 –

+0

我調用BlankFragment.ShowMessage(getContext(),new String(body))的類; from是一個實現rabbitmq defaultconsumer接口的靜態java類。它不是一個片段或一個活動 – Jon

0

如果您正在使用此方法(或從中調用它)片段,則片段可訪問帶有getActivity();的活動。將其作爲參數傳遞。

但如果你實際上是利用碎片(顯示敬酒消息)中的方法,那麼你可以嘗試使用getActivity()代替getContext().

+0

它既不,我打電話BlankFragment.ShowMessage(getContext(),新的字符串(身體));來自一個實現RabbitMQ默認消費者的靜態Java類。 – Jon