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

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

博客园 - 冰之玄岩,小小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);
                });
            }
        }
    }