web-dev-qa-db-ja.com

リスナーを実装する方法

デザインに問題があります。リスナーを実装する必要があります。私は次のSO質問を見ました: androidで独自のリスナーインターフェイスを作成する方法?

しかし、それが答えで提供するリンクで、著者はシステム定義のリスナーを拡張するだけのリスナーを作成します。たとえば、onClickの場合、検証を行ってから、「whenValidatedListener」という別のメソッドを呼び出します。

既存のイベントリスナーにリンクされていないリスナーを定義する必要があります。基本的に、ネイティブ(C/C++)コードとAndroidコード)でいくつかの処理が行われます。特定のメッセージからの応答にリスナーが必要です。

ハンドラーを使用してこれを行うことができると思います。ただし、AsyncTaskはマルチスレッドの推奨アプローチです。

AsyncTaskを使用してユーザー定義のリスナーを実装する方法はありますか?

17
OceanBlue

AsyncTaskは、リスナーの実装とは何の関係もありません。

これがリスナーです:

public interface TheListener {
    public void somethingHappened();
}

好きなように呼んでください。たとえば、ビューのようなものを行うクラスは次のとおりです。

public class Something {
    private TheListener mTheListener;

    public void setTheListener(TheListener listen) {
        mTheListener = listen;
    }

    private void reportSomethingChanged() {
        if (mTheListener != null) {
            mTheListener.somethingHappened();
        }
    }
}

これは好きなだけ複雑にすることができます。たとえば、単一のリスナーポインターの代わりに、ArrayListを使用して複数のリスナーを登録できます。

これをネイティブコードから呼び出すことも、リスナーインターフェイスの実装とは関係ありません。ネイティブコードがJava言語コードとどのように相互作用するかを学ぶには、JNIについて学ぶ必要があります。

51
hackbod

物事を片付けるために;

あなたは@hackbodが言ったことを正確に行い、これを追加します:

(メソッドsetListener(Listener listen)を使用して)クラスを囲むactivityListenerを実装し、その中にoncreateまたはonResumeまたは-これまでにyourClass.setListener(this)を呼び出しています。

5
MacD