我在开发天气应用程序。
我的主要活动布局中有一个协调员布局,我必须根据其状况更新背景(晴天,晴朗的夜晚等等)。
我一直在使用以下代码:
coordinatorLayout = (CoordinatorLayout)findViewById(R.id.viewApp);
coordinatorLayout.setBackground(getResources().getDrawable(R.drawable.sunny_day);
它第一次应用程序运行时工作正常,但随着我改变位置,它给了我强制停止错误。我认为问题是因为我从java(动态)更新UI。所以我尝试使用以下代码,而且没有强制停止了:
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
coordinatorLayout.setBackground(getResources().getDrawable(R.drawable.sunny_day));
}
});
现在我有另一个问题! 当我运行具有特定位置的应用程序时,例如' dallas'它工作得很好,并正确显示背景。但是当我寻找像上海这样的另一个城市时,由于它有不同的天气条件,我希望它能改变背景,但是背景会改变一秒,然后立即回到上一个! 这是我设置背景的方法:
private String setWeatherIcon(int actualId, int hourOfDay) {
int id = actualId / 100;
String icon = "";
if (actualId == 800) {
if (hourOfDay >= 7 && hourOfDay < 20) {
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
coordinatorLayout.setBackground(getResources().getDrawable(R.drawable.sunny_day));
}
});
icon = this.getString(R.string.weather_sunny);
} else {
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
coordinatorLayout.setBackground(getResources().getDrawable(R.drawable.sunny_day));
}
});
icon = this.getString(R.string.weather_clear_night);
}
} else {
switch (id) {
case 2:
icon = this.getString(R.string.weather_thunder);
break;
case 3:
icon = this.getString(R.string.weather_drizzle);
break;
case 7:
icon = this.getString(R.string.weather_foggy);
break;
case 8:
icon = this.getString(R.string.weather_cloudy);
break;
case 6:
icon = this.getString(R.string.weather_snowy);
break;
case 5:
icon = this.getString(R.string.weather_rainy);
break;
}
}
return icon;
}
顺便说一下,到目前为止,我实现了前两个条件。 有人能给我一点关于这个UI线程是如何工作的暗示吗?!