在我的应用中,我想将视图的背景更改为基于整数值的颜色。一切都很好,除了价值变化的时候。执行该方法后,只有部分视图得到更新。切换回应用程序后,整个视图正确更新,但是如何在不切换的情况下执行此操作?
执行背景颜色更改的代码:
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);
}
问题:
答案 0 :(得分:2)
您需要确保在主UI线程上执行更新颜色的调用。由于操作系统正在控制线程管理,因此您的更新正在中断且仅部分更新。
使用您活动中的RunOnUIThread()
来实现此目的。 https://developer.xamarin.com/api/member/Android.App.Activity.RunOnUiThread/p/System.Action/
这应该可以解决您的问题。希望这有帮助!
答案 1 :(得分:0)
这可能有用;
创建public static boolean isColorSet
变量并将其设置为
默认为false
。
只要您想要设置颜色,就将其值更新为true
。
Import
包含您的活动的类中的变量
你想改变颜色。
然后,执行if isColorSet
并在活动中设置颜色
在用户执行的任何其他小活动上检测到触摸。
此致