Android 非UI线程中更新UI

本文介绍了如何在非主线程类中通过构造函数获取主线程的Context,使用Looper.prepare()和Looper.loop()实现弹出dialog对话框的操作,并提供了自定义线程类的代码实现及开启线程的方法。
摘要由CSDN通过智能技术生成

案例:在非主线程类A中(非UI线程),需弹出dialog对话框窗口。

方案:通过构造函数,A从主线程创建对象时获取主线程的Context,将弹出对话框代码段写在

1、Looper.prepare();(非主线程中必须有,否则会报错: Can't create handler inside thread that has not called Looper.prepare()) 

2、Looper.loop();(Looper.loop()会循环取消息,该代码后的语句不会执行,可通过Looper.myLooper().quit();语句终止它。) 

这两条语句中间。

详细介绍可见下面网址,讲解的很详细。

http://blog.csdn.net/heng615975867/article/details/9194219

代码:

自定义一个类继承Thread,在自定义类的run方法中写弹出对话框代码段。

       public class MyThreadInPH extends Thread{

		@Override
		public void run() {
			Looper.prepare();
			
			PhoneNumberListDialog dialog = new PhoneNumberListDialog(PhoneHandler.this.ctx, phoneNumbers);
			dialog.setTitle("号码如下:");
			dialog.show();
			dialog.setOnListClickListener(new OnListItemClick() {
				
				@Override
				public void onListItemClick(PhoneNumberListDialog dialog, String phonenumber) {
					// TODO Auto-generated method stub
					dialog.dismiss();
					Looper.myLooper().quit();
				}
			});
			
			Looper.loop();
		}
		
	}

开启线程

<span style="white-space:pre">	</span>MyThreadInPH mt = new MyThreadInPH();<span style="white-space:pre">
</span>	mt.start();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值