2017-04-05 2 views
-1

Ich schrieb diese Hilfsmethode, um einen Toast von überall zu zeigen. Kann jemand bitte einen Blick darauf werfen und sagen, es ist alles in Ordnung, bevor ich es meiner Helferbibliotheksammlung hinzufüge?Zeige Toast unter allen Umständen

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(); 
    } 
} 

Hier ist die ToastOnUIThread Klasse:

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

Haben Sie bei der Verwendung dieses Codes Probleme festgestellt und benötigen Sie Hilfe, um den Fehler zu beheben? Weil ich sonst denke, das ist nicht der richtige Ort, um diese Frage zu stellen. Jedenfalls sehe ich keine Probleme mit Ihrem Code –

Antwort

0

Ich habe kein Problem noch nicht gefunden, aber vielleicht ist es egal, ob die Context ist eine Instanz von Aktivität oder nicht, denn:

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

Also, Sie brauchen es nur:

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