2016-09-10 7 views
-1

別のクラスで使用しているスレッドの背景色を変更したいと思います。しかし、残念なことに「ビュー階層を作成した元のスレッドのみがそのビューに触れることができます」というエラーが表示されます。レイアウトの変更スレッド内の背景

お手伝いできれば嬉しいです。

private class thread implements Runnable{ 

    @Override 
    public void run() { 

       while (!change_background) { 

        background.setBackgroundColor(Color.parseColor("#ffffff")); 

        try { 
         Thread.sleep(100); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 

        background.setBackgroundColor(Color.parseColor("#000000")); 

       } 
} 

答えて

2

うん、これは唯一の主なUIがそのビューに触れることができるという権利です。しかしそれには素晴らしい回避策があります。別のスレッドにいる場合でも、runOnUiThreadを使用してメインスレッドを呼び出すことができます。

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     //write UI related code in here 
     background.setBackgroundColor(Color.parseColor("#000000")); 
    } 
}); 
1

上記のコードをuithreadまたはハンドラを使用して呼び出します。

runOnUiThread

1

背景を変更するには、runOnUiThreadを使用します。

((Activity)context).runOnUiThread(new Runnable() { 
    public void run() { 
     // things need to work on ui thread 
    } 
}); 
関連する問題