在Android上使用andengine在ButtonSprite上添加OnClickListener

时间:2012-09-13 13:57:44

标签: java android andengine

我正在使用Android的andengine创建应用。我正在自动生成一些屏幕,需要将特定的OnClickListeners设置为特定按钮。

我正在使用org.andengine.entity.sprite.ButtonSpriteorg.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");
    }      
});

这种方式完美无瑕。问题是因为我自动生成一切我不能使用这种方法(至少不是我想要的方式......)

这有什么限制吗?我只是做错了吗?

1 个答案:

答案 0 :(得分:1)

也许您可以使用以下方法解决问题:

button.setOnClickListener( new OnClickListener()
{
    public void onClick( ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY )
    {
        (buttonListeners.get(button.id))).onClick(pButtonSprite, pTouchAreaLocalX, pTouchAreaLocalY);
    }      
});