在Xamarin Android中更改视图背景

时间:2017-01-04 15:14:42

标签: android xamarin

在我的应用中,我想将视图的背景更改为基于整数值的颜色。一切都很好,除了价值变化的时候。执行该方法后,只有部分视图得到更新。切换回应用程序后,整个视图正确更新,但是如何在不切换的情况下执行此操作?

执行背景颜色更改的代码:

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);
    }

问题:

Update problem

2 个答案:

答案 0 :(得分:2)

您需要确保在主UI线程上执行更新颜色的调用。由于操作系统正在控制线程管理,因此您的更新正在中断且仅部分更新。

使用您活动中的RunOnUIThread()来实现此目的。 https://developer.xamarin.com/api/member/Android.App.Activity.RunOnUiThread/p/System.Action/

这应该可以解决您的问题。希望这有帮助!

答案 1 :(得分:0)

这可能有用;

  1. 创建public static boolean isColorSet变量并将其设置为 默认为false

  2. 只要您想要设置颜色,就将其值更新为true

  3. Import包含您的活动的类中的变量 你想改变颜色。

  4. 然后,执行if isColorSet并在活动中设置颜色 在用户执行的任何其他小活动上检测到触摸。

  5. 此致