.Net程式員玩轉Android開發---(17)Handler用法

來源:互聯網
上載者:User

.Net程式員玩轉Android開發---(17)Handler用法

在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來傳遞訊息和參數進行處理

 

 

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;    }}

 

 

 

??

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.