Android 自定义事件监听器

Posted

技术标签:

【中文标题】Android 自定义事件监听器【英文标题】:Android Custom Event Listener 【发布时间】:2012-01-07 17:27:19 【问题描述】:

假设我想为我的班级制作自己的事件监听器,我该怎么做?我需要手动维护线程吗?

【问题讨论】:

查看 CodePath 主题 Creating Custom Listeners 【参考方案1】:
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.
    
 );   

【讨论】:

OnCustomEventListener 接口定义上的括号是错字吗? rDroid,谢谢你的例子! OnCustomEventListener 接口应该在 CustomView 类内部还是外部声明? 通常在视图类中声明接口。 抱歉问晚了,但我没有明白setCustomEventListener的目的,你没有在代码的任何地方调用这个函数 @killerprince182 您使用 OnCustomEventListener(一个接口)类型的匿名类设置 CustomEventListener,这需要您实现 onEvent 函数。这个匿名类被分配给 CustomView 中的 mListener。每当mListener.onEvent()被触发时,Activity中实现的OnEvent函数就会被执行。【参考方案2】:

可以通过以下方式完成

首先创建一个接口类:

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
      
);

【讨论】:

是的,非常简单易懂的代码。只需要一次编辑。请使用此序列来摆脱空指针异常。玩家 player = new Player();播放器.stop(); //我们正在停止音乐 player.setOnStopTrackEventListener(new OnStopTrackEventListener() @Override public void onStopTrack() //音乐停止时工作的代码 );【参考方案3】:

我发现this tutorial 非常有用。它解释了使用自定义侦听器管理代码中的回调的四个步骤:

1.将接口定义为事件契约,其中包含定义事件的方法和相关事件数据的参数。

2.在子对象中设置监听器成员变量和设置器,可以为其分配接口的实现。

3.Owner 传入一个监听器,该监听器实现接口并处理来自子对象的事件。

4.当对象想要将事件传达给它的所有者时,在定义的侦听器上触发事件

希望对你有帮助!

【讨论】:

以上是关于Android 自定义事件监听器的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用上的自定义事件监听器

RecycleView的使用+自定义监听事件

js怎么自定义事件,并能让用on事件监听

java 自定义事件的触发及监听

创建自定义事件

mui.fire()触发自定义事件