7

これが私のコードです:

final Foo myFoo = new Foo(new Inner() {
    @Override
    callback(){
         myFoo.bar();
    }
});

(実際の関数名付き)

final MyArrayAdapter aa = new MyArrayAdapter(new View.OnClickListener() {
    @Override
    onClick(){
         aa.notifyDataSetChanged();
    }
});

myFoo が初期化されていない可能性があるというエラーが Java から返されます。これを修正する方法はありますか?オブジェクトを構築するときにコールバックを null に設定し、後で変更する可能性がありますが、よりクリーンな方法があることを願っています。何か案は?(また、Foo が私によって作成されたものではなく、後でコールバックを変更するためのインターフェイスを公開しなかった場合も、これは機能しません)

誰かが興味を持っている場合のために、私の特定のシナリオでは、Foo は ArrayAdapter であり、バーは notifyDataSetChanged() です。アダプターによって表示される内容は、配列内のアイテムの値によって異なり、それらの値はクリックされると変化します。コールバックは clickListener です。

4

3 に答える 3

3

これは通常、定義にアクセスしなくても機能しInnerますが、ヘルパー クラスを作成する必要があります。

class CallbackHelper {
    private Foo foo;
    public void setFoo( Foo f ){ foo = f; }
    public Foo getFoo(){ return foo; }
}

そして、次のように使用します。

final CallbackHelper cbh = new CallbackHelper();
Foo myFoo = new Foo(new Inner() {
    @Override
    callback(){
         cbh.getFoo().bar();
    }
});
cbh.setFoo( myFoo );
于 2012-04-20T02:37:14.897 に答える
0

含まれているクラスでメソッドを宣言しcallBarOnMyFoo、コールバックから呼び出すことができます。

void callBarOnMyFoo() {
    myFoo.bar();
}

次に、コールバックを呼び出す必要がありますcallBarOnMyFoo。これは、コードが参照する必要がある外部クラスのインスタンス メソッドですInner(その構文を忘れてしまいました)。

于 2012-04-20T01:34:50.853 に答える