2017-01-11 7 views
0

내 Blankfragment.java이이 blankFragment.java 내부의 방법이다안드로이드 -

내부 방법에 별도의 정적 자바 클래스에서 문자열을 전달하기 위해 노력하고있어이 문제는 정적 메서드에서 토스트를 확인 그것은 정적이 아닌 getContext()에 액세스 할 수 없다는 것입니다.

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

그리고 별도의정적 자바 클래스의 메소드 호출 : 외부에서 컨텍스트를 검색하고 매개 변수로 전달하는 방법은

BlankFragment.ShowMessage(new String(body)); 

있습니까? getContext()가 작동하지 않아 "심볼을 처리 할 수 ​​없습니다"라는 오류가 발생합니다.

+0

getContext().의를 사용하여 시도 할 수 있습니다. param을'showMessage (String message, Context context)'로 구조화하십시오. 메소드 호출시,'.showMessage (new String (body), getApplicationContext())'. fragment의 경우, getContext()를 사용한다. –

답변

5

컨텍스트를 매개 변수로 전달할 수 있습니다. 이것은 단편이기 때문에 널 (null)을 확인하는 것이 좋습니다!

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 또는 다른 것을 사용하십시오. 일반적으로 Fragment가 "정착"될 때까지는 상황이 가능해집니다.

+0

다음 호출은 다음과 같다 : BlankFragment.ShowMessage (getContext(), new String (body)); 별도의 javaclass에서 호출되므로 거기에서 해당 메서드에 액세스 할 수 없습니다. 단순히 "cant resolve symbol"오류가 발생합니다 – Jon

+0

Fragment 클래스에서 메서드를 사용하는 경우 내 대답을 확인해보십시오 ... you Fragment 클래스 내의 Activity에 도달 할 수 있어야합니다. –

+0

BlankFragment.ShowMessage (getContext(), new String (body))를 호출하는 클래스입니다. from은 rabbitmq defaultconsumer 인터페이스를 구현하는 정적 Java 클래스입니다. 그것의 조각이나 활동이 아니다. – Jon

0

조각 모음에서이 메서드를 사용하거나 조각에서 호출하는 경우 조각은 getActivity();의 활동에 액세스 할 수 있습니다. 매개 변수로 전달하십시오. 실제로 조각 (표시 용 토스트 메시지) 내에서 방법을 사용하는 경우

그러나, 당신은 getActivity() 대신

+0

둘 다 아니야, 나는 BlankFragment.ShowMessage (getContext(), new String (body))를 호출한다. RabbitMQ 기본 소비자를 구현하는 정적 Java 클래스에서 가져옵니다. – Jon