一、实现事件监听可以有5种方式:
1.内部类形式:将事件监听器类定义成当前类的内部类
class xxActivity extends Activity
{
// 设置事件监听器
view.serOnXXListener(new xxListener ());
// 定义事件监听器内部类
class xxListener implements OnXXListener{
public void onXX(View v)
{
// to do someting
}
}
}
}
2.外部类形式:将事件监听器类定义成一个外部类
class xxListener implements OnXXListener{
public void onXX(View v)
{
// to do someting
}
}
}
class xxActivity extends Activity {
// 设置事件监听器
view.serOnXXListener(new xxListener ());
}
3.Activity本身作为事件监听器类
class xxActivity extends Activity implements OnXXListener {
// 设置事件监听器
view.serOnXXListener(this);
public void onXX(View v)
{
// to do someting
}
}
}
4.匿名内部类形式
class xxActivity extends Activity {
// 设置事件监听器
view.serOnXXListener(new onXXListener()
{
public void onXX(View v)
{
// to do someting
}
}
}
);
}
5.直接在XML布局文件内绑定
xml布局文件
....
android:onClick="clickHandle"
....
Activity文件
class xxActivity extends Activity {
public void clickHandle(View v)
{
// to do something
}
}
}
二、基于回调的事件处理机制
public class myButton extends Button
{
//省略构造函数
//重写Button某个回调事件
//重写Button某个回调事件
public boolean onKeyDown(int keyCode,KeyEvent event)
{
super.onKeyDown(keyCOde,event);
return true;
}
}
}
如果事件处理的回调方法返回true,表示事件已经可以就此终结,不会再向外传播,反之继续传播(比如至Activity)
与监听机制正好相反,回调机制中,其事件源与事件执行是一体的,没有分离。
三、Handler消息传递机制
在新线程中发送消息
在主线程中处理消息
安卓不允许Activity新启动的线程访问其本身的组件,该机制用以解决该问题
Handler myhandler=new Handler ()
{
public void handleMessage(Message msg)
{
if(msg.what==xxx)
// to do someting
}
}
new Timer().schedule(new TimeTask()
{
public void run()
{
Message msg =new Message();
msg.what=xxx;
myhandler.sendMessage (msg);
}
},0,800);