2011-11-28 127 views
35

说我想使自己的事件侦听器,我的课,我该怎么做呢?我是否需要手动维护线程?Android的自定义事件监听器

+1

查看代码路径的话题[创建自定义监听器(https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

回答

92
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对象设置一个事件监听这样:

customView.setCustomEventListener(new OnCustomEventListener() { 
    public void onEvent() { 
     //do whatever you want to do when the event is performed. 
    } 
}); 
+0

都在OnCustomEventListener接口定义的括号中的错字? –

+1

糟糕!是的,这是一个错字,纠正它。谢谢 – rDroid

+0

rDroid,感谢这个例子! OnCustomEventListener接口应该在CustomView类的内部还是外部声明? – Brabbeldas

5

它可以通过以下方式

首先创建一个接口类来完成:

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 
     } 
}); 
+0

美丽的代码。 – Dskato