Android自定义事件监听器

ada*_*rsh 43 mobile events android listener

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

rDr*_*oid 110

public class CustomView extends View(){
OnCustomEventListener mListener;
:
://some code
:
:
Run Code Online (Sandbox Code Playgroud)

创建一个由您的活动实现的界面:

public interface OnCustomEventListener {
    void onEvent();
}

public void setCustomEventListener(OnCustomEventListener eventListener) {
    mListener = eventListener;
}
Run Code Online (Sandbox Code Playgroud)

现在您需要知道事件何时实际发生.例如,当用户触摸屏幕上的某个点时,覆盖onTouchEvent方法:

onTouchEvent(MotionEvent ev) {
    if (ev.getAction==MotionEvent.ACTION_DOWN) {
        if(mListener!=null) 
            mListener.onEvent();
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,您可以创建所需的特定事件.(例子可以触及,等待2秒并释放 - 你需要在触摸事件中做一些逻辑).

在您的活动中,您可以使用customView对象来设置eventListener:

 customView.setCustomEventListener(new OnCustomEventListener() {
    public void onEvent() {
        //do whatever you want to do when the event is performed.
    }
 });   
Run Code Online (Sandbox Code Playgroud)

  • 哎呀!是的,这是一个错字,纠正它.谢谢 (2认同)

小智 14

它可以通过以下方式完成

首先创建一个接口类:

public interface OnStopTrackEventListener {
    public void onStopTrack();
}
Run Code Online (Sandbox Code Playgroud)

然后创建控制接口的类:

public class Player {

    private OnStopTrackEventListener mOnStopTrackEventListener;

    public void setOnStopTrackEventListener(OnStopTrackEventListener eventListener)
    {
        mOnStopTrackEventListener = eventListener;
    }

    public void stop()
    {
        if(mOnStopTrackEventListener != null)
        {
            mOnStopTrackEventListener.onStopTrack();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

就这些.我们现在就用吧

Player player = new Player();
player.stop(); //We are stopping music
player.setOnStopTrackEventListener(new OnStopTrackEventListener() {
      @Override
      public void onStopTrack() {
           //Code to work when music stops
      }
});
Run Code Online (Sandbox Code Playgroud)