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

Да, это правильно, что только основной пользовательский интерфейс может коснуться его вид. Но для этого есть приятное обходное решение. Даже если вы находитесь в другом потоке, вы можете вызвать главную тему, используя runOnUiThread.

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

Вызовите выше vode в uithread или используйте обработчик.

runOnUiThread

1

Использование runOnUiThread для изменения фона.

((Activity)context).runOnUiThread(new Runnable() { 
    public void run() { 
     // things need to work on ui thread 
    } 
});