Dans mon application, je veux changer l'arrière-plan de la vue en une couleur basée sur une valeur entière. Tout fonctionne bien, sauf lorsque la valeur change. Après l'exécution de la méthode, seule une partie de la vue est mise à jour. Après avoir quitté l'application et être revenu, la vue entière est mise à jour correctement, mais comment puis-je le faire sans changer d'application ?
Code pour effectuer des changements de couleur de fond :
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));
}
Edit 1
Cette méthode est appelée depuis la classe Database et est appelée lorsqu'une valeur est modifiée dans la base de données :
void PostgresNotification(object sender, NpgsqlNotificationEventArgs e)
{
var fase = e.AdditionalInformation;
main.SetColor(Convert.ToInt32(fase));
}
Où main est passé dans le constructeur de la base de données
MainActivity main;
public Database(MainActivity mainActivity)
{
//Shortened for brevity
main = mainActivity;
}
Le constructeur est appelé dans la fonction OnCreate() de MainActivity.
protected override void OnCreate(Bundle savedInstanceState)
{
//Shortened for brevity
db = new Database(this);
}
Problème :