Android学习笔记第二弹之事件处理

时间:2021-12-13 07:37:34

事件处理:OnclickListener 各种回调函数 使用Handle类在子线程和父线程之间的通信

通过组件的setOnClickListener()为组件配置响应的事件。分为三个顺序

1.直接触发OnClickListener()接口的 OnTouch()函数。

2.触发组件的回调函数,public boolean onTouchEvent(MotionEvent event){}

3.触发activity的回调函数,public boolean onTouchEvent(MotionEvent event){}

自己编写程序验证事件处理

 

事件处理中,Handle类的使用。Handle类是通过子线程发送消息给主线程,主线程根据消息类型执行不同的事件。因为android规定子线程是不能够更改主线程的界面组件。

一般的Handle使用方法:

1.创建子线程,在子线程中控制刷新时间。并在到达时间片之后 Handler.sendMessage(Message)传输Message数据。

2.在主线程中新建Handle对象。重写public void handleMessage()方法,并通过此方法获得message,识别message.what的类型 改变UI组件特征。

代码如下

package com.example.handle;

 

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.TextView;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

 

public class MainActivity extends Activity {

 

private TextView textView;

private Handler myHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView=(TextView)findViewById(R.id.textView1);

this.myHandler=new Handler(){

public void handleMessage(Message msg){

super.handleMessage(msg);

if(msg.what==0x12){

textView.setText("随机数是"+Math.random());

}

}

};

new Thread(new Runnable(){

public void run(){

try {

while(true){

Message msg=new Message();

msg.what=0x12;

myHandler.sendMessage(msg);

Thread.sleep(1000);

//Log.d("lyb","睡了一秒" );

}

catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}).start();

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

 

}