Android Custom Event Listener

前端 未结 3 2038
无人共我
无人共我 2020-11-28 02:24

Say I want to make my own event listener for my class, how do I do that? Do I need to maintain a thread manually?

相关标签:
3条回答
  • 2020-11-28 03:02
    public class CustomView extends View(){
    OnCustomEventListener mListener;
    :
    ://some code
    :
    :
    

    Create an interface that will be implemented by your activity:

    public interface OnCustomEventListener {
        void onEvent();
    }
    
    public void setCustomEventListener(OnCustomEventListener eventListener) {
        mListener = eventListener;
    }
    

    Now you need to know when the event is actually occurring. For example when the user touches a point on screen, override onTouchEvent method:

    onTouchEvent(MotionEvent ev) {
        if (ev.getAction==MotionEvent.ACTION_DOWN) {
            if(mListener!=null) 
                mListener.onEvent();
        }
    }
    

    Similarly, you can create a specific event that you want. (examples could be touch down, wait for exactly 2 seconds and release- you would need to do some logic inside touch event).

    In your activity, you can use the customView object to set an eventListener as such:

     customView.setCustomEventListener(new OnCustomEventListener() {
        public void onEvent() {
            //do whatever you want to do when the event is performed.
        }
     });   
    
    0 讨论(0)
  • 2020-11-28 03:07

    I found this tutorial to be VERY HELPFUL. It explains the four steps to using a custom listener to manage callbacks in your code:

    1.Define an interface as an event contract with methods that define events and arguments which are relevant event data.

    2.Setup a listener member variable and setter in the child object which can be assigned an implementation of the interface.

    3.Owner passes in a listener which implements the interface and handles the events from the child object.

    4.Trigger events on the defined listener when the object wants to communicate events to it's owner

    Hope it helps!

    0 讨论(0)
  • 2020-11-28 03:21

    It can be done in the following way

    First create an interface class :

    public interface OnStopTrackEventListener {
        public void onStopTrack();
    }
    

    Then create the class that controls the interface :

    public class Player {
    
        private OnStopTrackEventListener mOnStopTrackEventListener;
    
        public void setOnStopTrackEventListener(OnStopTrackEventListener eventListener)
        {
            mOnStopTrackEventListener = eventListener;
        }
    
        public void stop()
        {
            if(mOnStopTrackEventListener != null)
            {
                mOnStopTrackEventListener.onStopTrack();
            }
    
        }
    }
    

    That is all. Let's use it now

    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 讨论(0)
提交回复
热议问题