惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
A
About on SuperTechFans
J
Java Code Geeks
G
Google Developers Blog
L
LangChain Blog
小众软件
小众软件
宝玉的分享
宝玉的分享
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
博客园 - 【当耐特】
IT之家
IT之家
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
博客园 - Franky
博客园_首页
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
Vercel News
Vercel News
B
Blog
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 冰之玄岩,小小Programmer

程序员效率工具:3秒搞定JSON格式化,这个在线工具真香! 基于grafana+telegraf的服务器监控方案 Sql Server免域,异地备份 TeamCity+Docker k8s 安装步骤 Gitlab使用时的一些注意事项 Docker常用命令 AspNetCore OpenId AspNetCore中的IdentityServer4客户端认证模式实现 AspNet Core 认证 基于TeamCity的asp.net mvc/core,Vue 持续集成与自动部署 使用TFS 自动编译时的一点设置 SQL Server Update 语句使用Nolock 语法 SQl server 关于重复插入数据的测试 SQL Server 大数据量分页建议方案 页面轮换,ViewFlipper 和 ViewPager 的区别 C#开发Android环境搭建 SPQuery.ViewAttributes (.Net 3.5Sp1)WebForm使用System.Web.Routing
Mono for android 如何动态添加View,线程内部如何更新UI.
冰之玄岩,小小Programmer · 2014-03-13 · via 博客园 - 冰之玄岩,小小Programmer

貌似所有设计到UI的程序原理都是一样的,子线程是不能够更新UI状态的,所以就必须使用UI自身或者第三方来更新UI.

如 在WinForm 中 就可以使用Control.Invoke(Action action) 方法来用UI自身更新状态.当然我不是做WinForm的,更新的方法还有很多.

在Andorid的世界里,同样的,想更新UI的状态,必须借助一个第三方势力来更新.

下面是一个简单的动态添加一个ImageView,并从网络上获得图片的简单的例子.

  [Activity(Label = "My Activity")]
    public class SearchActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            this.SetContentView(Resource.Layout.Hostlayout);

            var layout = this.FindViewById<LinearLayout>(Resource.Id.HomeImageContent);

            Handler hander = new Handler();

            List<string> urlSource = new List<string>();

            foreach (var item in urlSource)
            {
                var address = item;
                var taks = System.Threading.Tasks.Task.Factory.StartNew(() =>
                {
                    Runnable run = new Runnable(() =>
                    {
                        Java.Net.URL url = new Java.Net.URL(address);
                        var map = Android.Graphics.BitmapFactory.DecodeStream(url.OpenStream());

                        ImageView image = new ImageView(this);
                        image.SetImageBitmap(map);
                        layout.AddView(image);
                    });
                    hander.Post(run);
                });
            }
        }
    }