クラスのイベントリスナを独自に作成したいのですが、どうすればよいですか?スレッドを手動で保守する必要がありますか?
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.
}
});
次の方法で行うことができます
最初にインターフェイスクラスを作成します。
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
}
});
このチュートリアル は非常に役立つことがわかりました。カスタムリスナーを使用してコード内のコールバックを管理するための4つのステップを説明します。
1.関連するイベントデータであるイベントと引数を定義するメソッドを使用して、インターフェイスをイベントコントラクトとして定義します。
2.インターフェースの実装を割り当てることができる子オブジェクトにリスナーメンバー変数とセッターをセットアップします。
3.Ownerは、インターフェイスを実装し、子オブジェクトからのイベントを処理するリスナーを渡します。
4.オブジェクトが所有者とイベントをやり取りしたい場合、定義されたリスナーのトリガーイベント
それが役に立てば幸い!