我正在开发一款 Android 游戏,目前正在尝试让文本输入正常工作。我想提示玩家输入他或她的名字并将该名字添加到高分列表中。
我正在尝试通过 EditText 来做到这一点,如果我将代码放入 onCreate 方法中,我就可以开始工作,但如果我从游戏循环中调用它,则不行。
我目前使用的方法:
public static void getInput(Context context)
{
final AlertDialog.Builder alert = new AlertDialog.Builder(context);
final EditText input = new EditText(context);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
String value = input.getText().toString().trim();
}
});
alert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
alert.show();
}
如果我从游戏循环中调用它,游戏就会崩溃并收到错误:
01-26 06:33:21.413: ERROR/AndroidRuntime(6960): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我尝试调用 Looper.prepare() 然后调用 Looper.loop(),这会打开文本输入框,但是当我关闭该框时,我的游戏只是黑屏并且没有响应。
所以,我的问题是:我做错了什么,有没有更简单的方法来获取文本输入?我的游戏基于 LunarLander 示例,因此我使用 SurfaceView。
任何帮助或建议将不胜感激。谢谢:)
最佳答案
嗨,斯米尔斯: 你的问题应该是线程问题。UI 上的任何更改都应该与 UI 线程一起下来。你可以使用处理程序来发布提示用户执行某些操作的 Intent 。你的游戏循环函数中的处理程序可以发布一条消息,并且相同的处理程序在你的 UI 线程上处理消息,然后更改你的 UI。
像这样的例子:
声明一个全局变量:
处理程序mHandler;
你的函数(){
Message msg = Message.obtain();
msg.what = your flag ;
handler.post(msg);
}
关于java - 我的游戏中的文本编辑文本输入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799776/