单击手机返回键,会连续弹出两次确认框!!!
Lua代码
self:performWithDelay(function()
-- keypad layer, for android
local layer = display.newLayer()
layer:addKeypadEventListener(function(event)
print("addKeypadEventListener:", event)
if event == "back" then
print("begin addKeypadEventListener back ", event)
-- call Java method
local javaClassName = "com.yishanghe.game.ball.Ball"
local javaMethodName = "showAlertDialog"
local javaParams = {
"确认退出",
"您确定要退出游戏吗?",
function(eventParam)
printf("Java method callback value is %s]", eventParam)
if eventParam == "OK" then
app:exit()
end
end
}
local javaMethodSig = "(Ljava/lang/String;Ljava/lang/String;I)V"
luaj.callStaticMethod(javaClassName, javaMethodName, javaParams, javaMethodSig)
end
if event == "menu" then
--do something
end
end)
self:addChild(layer)
layer:setKeypadEnabled(true)
end, 0.2)
```
java代码
static public void showAlertDialog(final String title,
final String message, final int luaCallbackFunction) {
s_instance.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog alertDialog = new AlertDialog.Builder(s_instance).create();
alertDialog.setTitle(title);
alertDialog.setMessage(message);
alertDialog.setButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
s_instance.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaCallbackFunction, "OK");
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaCallbackFunction);
}
});
}
});
alertDialog.setButton2("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
s_instance.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaCallbackFunction, "CANCEL");
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaCallbackFunction);
}
});
}
});
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
});
```