事件处理: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;
}
}