2016-10-12 13 views
-1

내 프로젝트의 구조는 다음입니다 : 활동을 - 조각 - 클래스클래스에서 토스트에 전화하는 방법?

문제를 : 클래스에 따라 몇 가지 조건이 토스트

문제 표시하려면 내가하여 클래스의 컨텍스트를 호출 할 수 없습니다에게 getActivity()

어떻게 최선의 방법으로 해결할 수 있습니까? Public 클래스 또는 변수를 만드시겠습니까?

+1

귀하의 질문은 매우 모호합니다. [mcve]를 만드는 방법을 검토하는 것이 좋습니다. – Bryan

+0

클래스 (TextWatcher)에서 토스트에 전화해야합니다. 모호한 질문이 아닙니다. – tadvas

+1

링크를 읽었습니까? 나는 당신이 [좋은 질문을하는 법] (http://stackoverflow.com/help/how-to-ask)을 읽어야한다고 생각한다. 문제 해결 방법에 대한 정보를 제공하지 않으며 문제를 재현 할 수있는 코드를 제공하지 않았습니다. * * 애매한 질문이며, 더 많은 정보를 제공하면 도움이 될 것입니다. – Bryan

답변

0

Context을 클래스 생성자로 보내주십시오. 이처럼 :

private Context context; 

public MyClass(Context ctx) { 
context = ctx; 
} 

그리고 건배를 표시하는 데 사용합니다. 다음과 같이

+0

유스 케이스를 모른 채'Context'를 전달하는 것은 좋은 방법입니다. (메모리 누수의 원인이됩니다.) (http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html) 신청. – Bryan

+0

@Bryan One은 WeakReference를 사용할 수 있습니다. –

+0

그건 그 일을하는 한 가지 방법이지만 모든 * 유스 케이스에는 필요하지 않습니다. 나는 그처럼 작은 정보를 바탕으로 대답을 게시하는 것을 주저했다. – Bryan

0

당신은 활동 수업 시간에 토스트를 호출 할 수 있습니다 -

Context context = getApplicationContext(); 
CharSequence text = "Hello toast!"; 
int duration = Toast.LENGTH_SHORT; 

Toast toast = Toast.makeText(context, text, duration); 
toast.show(); 

은 조각 또는 다른 클래스에 표시하려면 조각의 생성자 또는 특정 클래스의 활동이나 문맥의 참조를 전달해야합니다. 예,

조각 클래스에서
Fragment fragment = new Fragment(activity); 

-

Class MyFragment extends Fragment{ 
    private Activity mActivity; 

    MyFragment(Activity activity){ 
     mActivity = activity; 
    } 

    void showToast(){ 
     Toast.makeText(mActivity, text, duration); 
    } 

} 
1

Witho

public class Unknown { 

    public interface UnknownListener { 

     void displayMessage(CharSequence message); 

    } 

    private UnknownListener mUnknownListener; 

    private final String mToastMessage = "Unknown message"; 

    public Unknown() {} 

    public void setUnknownListener(UnknownListener listener) { 
     mUnknownListener = listener; 
    } 

    private void doSomething() { 
     if(mUnknownListener != null) { 
      mUnknownListener.displayMessage(mToastMessage); 
     } 
    } 

} 

그런 다음에 참조를 확실하게 제거하면서, 당신의 Activity의 인터페이스를 구현 : 유타 많은 상황, 내가 Activity가 아닌 다른 클래스에서 Toast 메시지를 트리거 추천 할 수있는 유일한 방법은 Listener 인터페이스를 사용하는 것입니다 해당 라이프 사이클 방법 :

public class MainActivity extends AppCompatActivity implements Unknown.UnknownListener { 

    private Unknown mUnknown; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mUnknown = new Unknown(); 
     mUnknown.setUnknownListener(this); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mUnknown.setUnknownListener(null); 
    } 

    @Override 
    public void displayMessage(CharSequence message) { 
     Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 
    } 

} 
+0

답장을 보내 주셔서 감사합니다. 어쩌면 가장 적절한 해결책 일 수도 있지만, 가장 간단한 방법으로 생성자를 호출하는 것을 선호합니다. 그러나 고맙습니다. – tadvas