【发布时间】:2012-01-07 17:27:19
【问题描述】:
假设我想为我的班级制作自己的事件监听器,我该怎么做?我需要手动维护线程吗?
【问题讨论】:
-
查看 CodePath 主题 Creating Custom Listeners
标签: android events mobile listener
假设我想为我的班级制作自己的事件监听器,我该怎么做?我需要手动维护线程吗?
【问题讨论】:
标签: android events mobile listener
public class CustomView extends View(){
OnCustomEventListener mListener;
:
://some code
:
:
创建一个将由您的活动实现的接口:
public interface OnCustomEventListener {
void onEvent();
}
public void setCustomEventListener(OnCustomEventListener eventListener) {
mListener = eventListener;
}
现在您需要知道事件实际发生的时间。例如当用户触摸屏幕上的一个点时,覆盖 onTouchEvent 方法:
onTouchEvent(MotionEvent ev) {
if (ev.getAction==MotionEvent.ACTION_DOWN) {
if(mListener!=null)
mListener.onEvent();
}
}
同样,您可以创建您想要的特定事件。 (示例可能是触地,等待正好 2 秒然后释放 - 您需要在触摸事件中执行一些逻辑)。
在您的活动中,您可以使用 customView 对象来设置 eventListener:
customView.setCustomEventListener(new OnCustomEventListener() {
public void onEvent() {
//do whatever you want to do when the event is performed.
}
});
【讨论】:
可以通过以下方式完成
首先创建一个接口类:
public interface OnStopTrackEventListener {
public void onStopTrack();
}
然后创建控制界面的类:
public class Player {
private OnStopTrackEventListener mOnStopTrackEventListener;
public void setOnStopTrackEventListener(OnStopTrackEventListener eventListener)
{
mOnStopTrackEventListener = eventListener;
}
public void stop()
{
if(mOnStopTrackEventListener != null)
{
mOnStopTrackEventListener.onStopTrack();
}
}
}
就是这样。让我们现在使用它
Player player = new Player();
player.stop(); //We are stopping music
player.setOnStopTrackEventListener(new OnStopTrackEventListener() {
@Override
public void onStopTrack() {
//Code to work when music stops
}
});
【讨论】:
我发现this tutorial 非常有用。它解释了使用自定义侦听器管理代码中的回调的四个步骤:
1.将接口定义为事件契约,其中包含定义事件的方法和相关事件数据的参数。
2.在子对象中设置监听器成员变量和设置器,可以为其分配接口的实现。
3.Owner 传入一个监听器,该监听器实现接口并处理来自子对象的事件。
4.当对象想要将事件传达给它的所有者时,在定义的侦听器上触发事件
希望对你有帮助!
【讨论】: