web-dev-qa-db-ja.com

Androidカスタムイベントリスナー

クラスのイベントリスナを独自に作成したいのですが、どうすればよいですか?スレッドを手動で保守する必要がありますか?

43
adarsh
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.
    }
 });   
110
rDroid

次の方法で行うことができます

最初にインターフェイスクラスを作成します。

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
      }
});
14
Onur Ciner

このチュートリアル は非常に役立つことがわかりました。カスタムリスナーを使用してコード内のコールバックを管理するための4つのステップを説明します。

1.関連するイベントデータであるイベントと引数を定義するメソッドを使用して、インターフェイスをイベントコントラクトとして定義します。

2.インターフェースの実装を割り当てることができる子オブジェクトにリスナーメンバー変数とセッターをセットアップします。

3.Ownerは、インターフェイスを実装し、子オブジェクトからのイベントを処理するリスナーを渡します。

4.オブジェクトが所有者とイベントをやり取りしたい場合、定義されたリスナーのトリガーイベント

それが役に立てば幸い!

1
mavesonzini