java - Android 数学测验(线程操作)

标签 java android multithreading android-activity android-dialog

我需要做一个数学测验。这是工作流程:

单击按钮(开始)时,我需要显示一个问题,例如5+5,它在屏幕上停留 2 秒钟,然后显示一个对话框,询问先前操作的结果。我需要重复一遍,例如5次。最后我需要向用户显示正确答案的数量。

我有 Java 经验,但我是 Android 新手。我已经阅读了有关 Android 线程的各种文章和示例,但尚未找到此工作流程的解决方案。

据我所知,我无法阻止或暂停主/UI 线程,但问题是我应该重复以下问题: 5 次,每次之后(2 秒后)我应该暂停 Activity 以显示对话框,然后返回显示另一个问题。

提前致谢!

编辑: 这是我现在的代码。该号码显示在屏幕上,2 秒后会显示警报对话框,要求输入该号码。但问题是应用程序不会等待用户输入,而是继续显示新的随机数,并每 2 秒打开一个新的警报对话框。

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_questions);

    tv = (TextView) findViewById(R.id.questionText);

    handler = new Handler();

    Runnable r = new Runnable() {
        public void run() {
            tv.setText(String.valueOf(rand.nextInt(50) + 1));
            createDialog();
            handler.postDelayed(this, 2000);
        }
    };

    handler.postDelayed(r, 2000);
}


 protected void createDialog() {
    LayoutInflater li = LayoutInflater.from(context);
    View promptsView = li.inflate(R.layout.activity_answer_dialog, null);

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

    // set prompts.xml to alertdialog builder
    alertDialogBuilder.setView(promptsView);

    final EditText userInput = (EditText) promptsView.findViewById(R.id.editTextDialogUserInput);

    // set dialog message
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // get user input and set it to result
                            // edit text
                            result.setText(userInput.getText());
                        }
                    })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            dialog.cancel();
                        }
                    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();
}
PS。我还尝试为对话框创建单独的 Activity 并将此行添加到 list 中:

android:theme="@android:style/Theme.Dialog" 

但是同样的事情发生了。

最佳答案

您使用事件驱动编程和计时器。要在 2 秒后显示对话框,最简单的方法是使用 postDelayed 将 runnable 发布到处理程序,这将在 N 毫秒内调用您的 runnable。然后显示对话框。

您不需要暂停 Activity 来显示对话框,只需显示它即可。对话框完成后要运行的任何代码都应放入对话框的“确定”按钮的处理程序中。换句话说,您的代码将被调用以响应按下按钮的事件。

关于java - Android 数学测验(线程操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427959/

相关文章:

java - 执行器正在执行两次

c# - 单独的 UI 线程上的 WPF 控件?

java - 从 onClick(DialogInterface 对话框) 执行 AsyncTask

java - 吉利德 GWT 与 playframework

android - Groovy调用adb命令来提取文件,但是新文件不可见

带有图标的 Android ContextMenu 选项

java - XML解析: counting the number of sub elements

java - Spring @Autowired 不在新线程上工作

android - 使用 setDefaultUncaughtExceptionHandler (reportDropResult) 捕获未处理的异常时线程卡住

python - 了解 python GIL - I/O 绑定(bind)与 CPU 绑定(bind)