2017-04-05 171 views
-1

我寫了這個輔助方法來顯示任何地方的吐司。在我將它添加到我的幫助程序庫集合之前,是否有人可以看一下並說完全沒問題?在任何情況下顯示吐司

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類是:

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是否是活動的實例或不是,因爲:

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

所以,你只需要:

Handler h = new Handler(mainLooper); 
h.post(r);