1

我正在使用 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");
    }      
});

这种方式完美无缺。问题是因为我自动生成了所有我不能使用这种方法的东西(至少不是我想要的方式......)

这是对其工作方式的一些限制吗?我只是做错了吗?

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 回答