.Net程序员玩转Android开发---(17)Handler用法
来源:互联网 发布:两心之外无人知歌词 编辑:程序博客网 时间:2024/06/05 17:52
在android开发中,如果在一个线程中想更新主界面中控件显示的数据,直接给主界面控件赋值就会出现异常,android中为了安全起见,是不允许在线程中更新界面控件的数据,遇到这种情况,我们可以使用Handler. Handler就是处理界面和线程间的消息传递,通信的组件。下面我们演示下handler处理详细的两种办法,下面的这个列子通过点击不同按钮展现handler.post和handler.sendmsg两个传递消息的方法。
1. Handler.Post
创建一个handler对象和Runnable对象,通过handler.post(new Runnable(){});处理来更新界面中的textview的数据
2.Handler.sendMessage
这个例子中,我们创建一个employee员工类,单击按钮的时候,显示员工的信息,通过handler.sendmessage来传递消息和参数进行处理
全部代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textViewMsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <Button android:id="@+id/btnpost" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="handler post" /> <Button android:id="@+id/btnmsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="handler message" /> </LinearLayout>
package com.example.helloword;import android.R.string;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.SimpleAdapter;import android.widget.TextView;public class HandlerActivity extends Activity {private TextView tv;private Button btnpost;private Button btnmsg;private Handler handler=new Handler();//post处理handler//sendmsg处理handlerprivate Handler handlerTwo=new Handler(){public void handleMessage(Message msg) {switch (msg.what) {case 0:tv.setText("姓名:"+((employee)msg.obj).name);break;}}};protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.handlerlayout);tv=(TextView)findViewById(R.id.textViewMsg);btnpost=(Button)findViewById(R.id.btnpost);btnmsg=(Button)findViewById(R.id.btnmsg);btnpost.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubThread thread=new Thread(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubhandler.post(runOne);}});thread.start();}});btnmsg.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubThread thread=new Thread(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubMessage msg=new Message();msg.arg1=1;employee employeeone=new employee();employeeone.name="员工1";employeeone.age=20;msg.obj=employeeone;msg.what=0;handlerTwo.sendMessage(msg);}});thread.start();}});} Runnable runOne=new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubtv.setText("正在执行handler post");} }; public class employee { public String name; public int age; }}
0 0
- .Net程序员玩转Android开发---(17)Handler用法
- .Net程序员玩转Android开发---(18)Android服务
- .Net程序员玩转Android开发---(19)Android IntentService服务
- .Net程序员玩转Android开发---(20)Android绑定服务
- .Net程序员玩转Android开发---(1)环境搭建
- .Net程序员玩转Android开发---(3)登陆页面布局
- .Net程序员玩转Android开发---(4)注册页面布局
- .Net程序员玩转Android开发---(5)项目文件介绍
- .Net程序员玩转Android开发---(6)线性布局LinearLayout
- .Net程序员玩转Android开发---(7)相对布局RelativeLayout
- .Net程序员玩转Android开发---(8)表格布局TableLayout
- .Net程序员玩转Android开发---(9)绝对布局AbsoluteLayout
- .Net程序员玩转Android开发---(10)帧布局FrameLayout
- .Net程序员玩转Android开发---(11)页面跳转
- .Net程序员玩转Android开发---(12)ListView显示数据
- .Net程序员玩转Android开发---(1)环境搭建
- .Net程序员玩转Android开发---(3)登陆页面布局
- .Net程序员玩转Android开发---(4)注册页面布局
- OpenCV——PS滤镜算法之 球面化 (凹陷效果)
- MYSQL 内部结构优化器(MySQL Internals Optimizer)
- css实现菜单内容变换
- Shell程序
- MFC消息映射
- .Net程序员玩转Android开发---(17)Handler用法
- hello.c-hell.ko
- Linux最大线程数限制及当前线程数查询
- Java递归实现全排列改进(一)---利用HashSet实现去重
- java.util.Queue用法
- 动态链接库和静态链接库
- JAVA多线程和并发基础面试问答
- VS2010 常用快捷键
- java设计模式之四:代理模式 java静态代理和动态代理