1

Android用のandengineを使用してアプリを作成しています。一部の画面を自動生成しており、特定の OnClickListeners を特定のボタンに設定する必要があります。

と を使用org.andengine.entity.sprite.ButtonSpriteして org.andengine.entity.sprite.ButtonSprite.OnClickListenerいます。

各ボタンには ID 文字列があるため、シーンを初期化して HashMap に保存するときにリスナーを作成できるようにしたいと考えていました。そのようです:

buttonListeners = HashMap<String, Object>();
OnClickListener ocl = new OnClickListener() {
            public void onClick( ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY ) {
                //Do stuff
                Log.d("Button Test", "Huzzah A");
            }      
        };
buttonListeners.put("play_button", ocl);

そして、ボタンを作成するときは、次のようにします。

button.setOnClickListener((OnClickListener) buttonListeners.get(button.id));

これは動作しません。HashMap に問題があると思われるので、上記と同じクラス変数 ocl2 を作成し、コンストラクターで初期化して、次のように使用してみました。

button.setOnClickListener(ocl2);

それもうまくいきませんでした。「それ」を間違っているだけではないことを確認するつもりで、これを試しました:

button.setOnClickListener( new OnClickListener()
{
    public void onClick( ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY )
    {
        //Do stuff
        Log.d("Button Test", "Huzzah C");
    }      
});

そして、この方法は完璧に機能します。問題は、すべてを自動生成するため、このメソッドを使用できないことです (少なくとも、私が望む方法ではありません...)

これは、これが機能する方法に何らかの制限がありますか? 私はそれを間違っているだけですか?

4

1 に答える 1

1

たぶん、あなたは以下を使うことによって問題を回避することができます:

button.setOnClickListener( new OnClickListener()
{
    public void onClick( ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY )
    {
        (buttonListeners.get(button.id))).onClick(pButtonSprite, pTouchAreaLocalX, pTouchAreaLocalY);
    }      
});
于 2012-09-14T11:47:27.877 に答える