java - 我的游戏中的文本编辑文本输入问题

标签 java android

我正在开发一款 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/

相关文章:

java - 我的 Android 程序使用 GPS 非常不准确

android - 使用新版 Admob Ads 附加 google play 服务时应用程序大小会增加吗?

java - 可运行类未执行

java - 在 ServletContextListener 上获取 Spring 应用程序上下文

java - 查找以哈希开头和结尾的句子

android - 如何在 Android 模拟器上创建并运行示例 Vulkan 应用程序?

Java 搜索两个数组

java - 如何从 Netbeans 中删除自动生成的代码

java - 如何使用带有 json 的 Map 从数据库设置 map latlng 值?

javascript - 创建供网站和移动设备使用的 API