2017-04-05 26 views
-1

私はこのヘルパーメソッドを書いて、どこからでもトーストを表示できます。私のヘルパーライブラリコレクションに追加する前に誰かが見て、それはすべてOKであると言うことができますか?ここでどのような状況でもトーストを表示する

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); 
関連する問題