android - 更改 Xamarin Android 中的 View 背景

标签 android xamarin

在我的应用程序中,我想将 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);
    }

问题:

Update problem

最佳答案

您需要确保更新颜色的调用是在主 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/

相关文章:

c# - 如何使用 OxyPlot 在 Xamarin.Forms 可移植应用程序中创建图表?

visual-studio - 项目 * 需要部署后才能启动

c# - Xamarin 表单 - 切换条目 View 的 IsPassword 时出错(仅在 uwp 上)

c# - 如何在 Xamarin iOS 上执行简单的后台任务

android - 在要启动的类中将 Intent 调度编写为静态方法是一个好习惯吗?

android - BluetoothChat 示例 : NullPointerException

java - 如何在 Bazel 中为 Android 项目添加 Maven 依赖项(例如 Volley、Gson)?

android - Scala 上使用最少 GC 的池化

Android FileLock...如何锁定来自不同进程的文件

Xamarin Forms - IOS 支持的最低版本