在我的应用程序中,我想将 View 的背景更改为基于整数值的颜色。一切工作正常,除了值发生变化时。执行该方法后,仅更新 View 的一部分。退出应用程序并切换回来后,整个 View 都会正确更新,但是在不切换的情况下如何做到这一点?
用于执行背景颜色更改的代码:
public void SetColor(int status)
{
View colorView = FindViewById(Resource.Id.view1);
// Find the root view
View root = colorView.RootView;
string color = "";
Log.Debug(TAG, string.Format("SetColor: {0}", status));
switch (status)
{
case 1:
Log.Debug(TAG, "1");
color = "Red";
break;
case 2:
Log.Debug(TAG, "2");
color = "Yellow";
break;
case 3:
Log.Debug(TAG, "3");
color = "Green";
break;
case 4:
Log.Debug(TAG, "4");
color = "YellowGreen";
break;
case 5:
Log.Debug(TAG, "5");
color = "Grey";
break;
default:
Log.Debug(TAG, "6");
break;
}
Log.Debug(TAG, string.Format("Color: {0}", color));
root.SetBackgroundColor(Color.ParseColor(color));
}
编辑 1
该方法是从 Database 类调用的,当数据库中的值发生更改时调用:
void PostgresNotification(object sender, NpgsqlNotificationEventArgs e)
{
var fase = e.AdditionalInformation;
main.SetColor(Convert.ToInt32(fase));
}
main 在数据库构造函数中传递的位置
MainActivity main;
public Database(MainActivity mainActivity)
{
//Shortened for brevity
main = mainActivity;
}
在MainActivity的OnCreate()中调用构造函数
protected override void OnCreate(Bundle savedInstanceState)
{
//Shortened for brevity
db = new Database(this);
}
问题:
最佳答案
您需要确保更新颜色的调用是在主 UI 线程上执行的。您的更新被中断,并且仅部分更新,因为操作系统正在控制线程管理。
在您的 Activity 中使用 RunOnUIThread()
来实现这一点。 https://developer.xamarin.com/api/member/Android.App.Activity.RunOnUiThread/p/System.Action/
这应该可以解决您的问题。希望这有帮助!
关于android - 更改 Xamarin Android 中的 View 背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467134/