我正在使用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");
}
});
这种方式完美无瑕。问题是因为我自动生成一切我不能使用这种方法(至少不是我想要的方式......)
这有什么限制吗?我只是做错了吗?
答案 0 :(得分:1)
也许您可以使用以下方法解决问题:
button.setOnClickListener( new OnClickListener()
{
public void onClick( ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY )
{
(buttonListeners.get(button.id))).onClick(pButtonSprite, pTouchAreaLocalX, pTouchAreaLocalY);
}
});