2016-07-15 6 views
0

私は別のスレッドからこの方法 Toast.makeText(MainActivity.this, txt, Toast.LENGTH_LONG).show(); を実行すると、アプリケーションはのonCreateからのみ動作しているように落ちるが、どこでも正常に動作しますトースト(アンドロイド)

DebugText.setText(txt);

...他に助けることができますか?

public void screenMessage(final String txt) { 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       //DebugText.setText(txt); 
       Toast.makeText(MainActivity.this, txt, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
+0

'handler.postを試し呼び出す逃したと思います(新しいRunnableを(){ ...} '私はこのような試みたが、あまりにも – Alex

+0

' DebugText.setText(TXT)作品をdid't;? 'DebugTextは - それは' screenMessage'メソッドを含むクラスのTextView(それが正常に動作します) – Alex

+0

だ –

答えて

0

以下のように(それは私のためにどこでも動作します)私の解決策:

public static void showToast(final Context ctx, final String msg, int type) { 
    if (ctx == null || TextUtils.isEmpty(msg)) 
     return; 
    final int toastType = type == Toast.LENGTH_LONG ? Toast.LENGTH_LONG 
      : Toast.LENGTH_SHORT; 
    if (Looper.myLooper() == Looper.getMainLooper()) { 
     Toast.makeText(ctx, msg, toastType).show(); 
    } else { 
     new Handler(Looper.getMainLooper()).post(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(ctx, msg, toastType).show(); 
      } 
     }); 
    } 
} 
+0

説明を追加します。 – piyushj

+0

'パブリック静的ボイドshowToast(最終コンテキストctx、最終文字列MSG、int型)は'このようにそれを呼び出しますか? 'showToast(getApplicationContext()、msg、Toast.LENGTH_LONG);または'現在のコンテキストを取得する方法は? – Alex

+0

私はUITool.javaでこのコードを有し、また 'UITool.showToast(文脈、MSG、Toast.LENGTH_LONG)'のように呼ばれるシングルトンアプリケーションオブジェクトを有します。コンテキストはMainActivity.this OR MyApplication.getInstance 'によってシングルトンアプリケーションオブジェクト()することができ'私は、他のコンテキストを取得できない場合 – billy

0

私はあなたが、スタートはこの

public void screenMessage(final String txt) { 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       //DebugText.setText(txt); 
       Toast.makeText(MainActivity.this, txt, Toast.LENGTH_LONG).show(); 
      } 
     }).start();  
関連する問題