深入理解Android事件处理(二)
2014-12-25 15:45
447 查看
Android事件处理(二)
2、基于回调事件的处理
如果说事件监听是一种委托的事件处理,那么回调机制恰好相反,对于回调机制事件处理模型来说,事件源和时间监听器是统一的,或者说事件监听器完全消失了,当组件激发某个事件时,组件自己特定的方法会负责去处理,
而Java又是一个静态语言,我们无法为某个对象动态添加方法,因此只能继承GUI组件类,并重写该类的事件处理方法来实现。
①自定义UI界面来时现基于回调的时间处理机制。
public class MyButton extends Button
{
public MyButton(Context context, AttribueSet set)
{
super(context,set);
}
public boolean onKeyDown(int keyCode,KeyEvent event)
{
super.onKeyDown(keyCode,event);
Log.v("sfs","sdf");
return true; // 返回true表示该事件完全处理,不会传播出去,如果false,表示为完全处理,return false
}
}
在UI 界面添加自定义的Button
<com.sim.demo.MyButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击我"
/>
3、事件传播
某组件上发生的事件不仅激发了该组件上的回调方法,也会触发该组件所在的Activity的回调方法----只要事件能传播到该Activity
public class Propagation extends Activity
{
puglic void onCreate(Bundle savedInstanceState){
super.onCreate(saveInstanceState);
bt = findViewById(R.id.bn);
bt.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View source,int keyCode,KeyEvent event)
{
if(event.getAction()==KeyEvent.ACTION_DOWN){
Toast.makeText(getApplicationContext(),
"触发了点击效果",
Toast.LENGTH_SHORT).show();
}
return false; //会向外扩散
}
});
public boolean onKeyDown(int keyCode,KeyEvent event)
{
Toast.makeText(getApplicationContext(),
"触发了点击效果",
Toast.LENGTH_SHORT).show();
return true;
}
}
上面就会触发两次效果
④对比Android两种事件处理方式?
不难发现基于监听事件处理模型具有更大的优势,
基于监听的事件模型分工更明确,事件源,事件监听由两个类分工实现,因此具有更好的课维护性。所以通常优先考虑基于监听的事件处理
2、基于回调事件的处理
如果说事件监听是一种委托的事件处理,那么回调机制恰好相反,对于回调机制事件处理模型来说,事件源和时间监听器是统一的,或者说事件监听器完全消失了,当组件激发某个事件时,组件自己特定的方法会负责去处理,
而Java又是一个静态语言,我们无法为某个对象动态添加方法,因此只能继承GUI组件类,并重写该类的事件处理方法来实现。
①自定义UI界面来时现基于回调的时间处理机制。
public class MyButton extends Button
{
public MyButton(Context context, AttribueSet set)
{
super(context,set);
}
public boolean onKeyDown(int keyCode,KeyEvent event)
{
super.onKeyDown(keyCode,event);
Log.v("sfs","sdf");
return true; // 返回true表示该事件完全处理,不会传播出去,如果false,表示为完全处理,return false
}
}
在UI 界面添加自定义的Button
<com.sim.demo.MyButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击我"
/>
3、事件传播
某组件上发生的事件不仅激发了该组件上的回调方法,也会触发该组件所在的Activity的回调方法----只要事件能传播到该Activity
public class Propagation extends Activity
{
puglic void onCreate(Bundle savedInstanceState){
super.onCreate(saveInstanceState);
bt = findViewById(R.id.bn);
bt.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View source,int keyCode,KeyEvent event)
{
if(event.getAction()==KeyEvent.ACTION_DOWN){
Toast.makeText(getApplicationContext(),
"触发了点击效果",
Toast.LENGTH_SHORT).show();
}
return false; //会向外扩散
}
});
public boolean onKeyDown(int keyCode,KeyEvent event)
{
Toast.makeText(getApplicationContext(),
"触发了点击效果",
Toast.LENGTH_SHORT).show();
return true;
}
}
上面就会触发两次效果
④对比Android两种事件处理方式?
不难发现基于监听事件处理模型具有更大的优势,
基于监听的事件模型分工更明确,事件源,事件监听由两个类分工实现,因此具有更好的课维护性。所以通常优先考虑基于监听的事件处理
相关文章推荐
- 深入理解Android事件处理(一)
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 无刷新“页面跳转” Page,你是怎样处理回发事件的? 深入理解 __doPostBack
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统原理
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- android-->BroadcastReceiver(深入理解广播事件)
- 深入理解Android消息处理系统——Looper、Handler、Thread
- (转)深入理解Android消息处理系统——Looper、Handler、Thread