2017-04-05 1 views
-1

나는이 도우미 방법을 써서 어디에서 건 축배를 보여줬다. 누군가가 내 헬퍼 도서관 컬렉션에 추가하기 전에 확인해 볼 수 있습니까?토스트 쇼를 어떤 상황에서든지

private static class ToastOnUIThread implements Runnable { 

    private Context ctx; 
    private CharSequence msg; 

    private ToastOnUIThread(Context ctx, CharSequence msg) { 

     this.ctx = ctx; 
     this.msg = msg; 
    } 

    public void run() { 

     Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show(); 
    } 
}; 
+0

이 코드를 사용하는 동안 문제를 발견 했습니까? 해결하려면 도움이 필요합니까? 그렇지 않으면 나는 이것이이 질문을하는 적절한 장소가 아니라고 생각하기 때문입니다. 어쨌든 코드에 문제가 보이지 않습니다. –

답변

0

아직 어떤 문제를 발견하지 않은,하지만 어쩌면 Context이 활동의 ​​인스턴스인지, 때문인지는 중요하지 않습니다 여기에

static void showToast(Context ctx, CharSequence msg) { 

    Looper mainLooper = Looper.getMainLooper(); 
    Runnable r = new ToastOnUIThread(ctx, msg); 

    boolean onUiThread; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     onUiThread = mainLooper.isCurrentThread(); 
    } else { 
     onUiThread = Thread.currentThread() == mainLooper.getThread(); 
    } 

    if (!onUiThread) { 
     if (ctx instanceof Activity) { 
      ((Activity) ctx).runOnUiThread(r); 
     } else { 
      Handler h = new Handler(mainLooper); 
      h.post(r); 
     } 
    } else { 
     r.run(); 
    } 
} 

의 ToastOnUIThread 클래스입니다 :

public final void runOnUiThread(Runnable action) { 
    if (Thread.currentThread() != mUiThread) { 
     mHandler.post(action); 
    } else { 
     action.run(); 
    } 
} 

그래서, 당신은 단지 그것을 필요 :

Handler h = new Handler(mainLooper); 
h.post(r); 
관련 문제