如何更改进度对话框文本

Posted

技术标签:

【中文标题】如何更改进度对话框文本【英文标题】:How to change progressDialog text 【发布时间】:2018-06-25 12:47:42 【问题描述】:

我有一个 asynctask 但如果我实现 Thread.Sleep ,那么我的应用程序崩溃了,我不知道为什么,在 onPreExecute 我可以看到我的第一条消息,然后在两秒后它出现了我放入 doInBackground 的另一条消息,但是它不工作

private class sendMail extends AsyncTask<Void, Void, Void> 


        protected void onPreExecute() 
            dialog.setMessage("Please wait...");
            dialog.show();

        

        // automatically done on worker thread (separate from UI thread)
        @Override
        protected Void doInBackground(Void... voids) 
            try 
                Thread.sleep(2000);
             catch (InterruptedException e) 
                e.printStackTrace();
            
            dialog.setMessage("Downloading files...");

            new BackgroundTask().execute();

//MY DOWNLOADING METHODS STUFF

然后我在其他地方关闭此对话框

日志

执行doInBackground()时出错

【问题讨论】:

【参考方案1】:

您无法从后台线程访问 UI 元素,您可以在 onProgressUpdate 中更新进度条,最重要的是您需要在 doInBackground 中 publishProgress(value) 并使用 onProgressUpdate 进行更新。阅读有关 AsyncTask 的更多信息here。

示例代码:

class MyTask extends AsyncTask<Integer, Integer, String> 
        @Override
        protected String doInBackground(Integer... params) 
            for (; count <= params[0]; count++) 
                try 
                    Thread.sleep(1000);
                    publishProgress(count);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
            
            return "Task Completed.";
        
        @Override
        protected void onPostExecute(String result) 
            progressBar.setVisibility(View.GONE);
                txt.setText(result);
                btn.setText("Restart");
        
        @Override
        protected void onPreExecute() 
            txt.setText("Task Starting...");
        
        @Override
        protected void onProgressUpdate(Integer... values) 
            txt.setText("Running..."+ values[0]);
            progressBar.setMessage("Downloading files...");
            progressBar.setProgress(values[0]);
        
    

【讨论】:

老兄,这是一个进度条,我正在使用进度对话框,还请参考您粘贴该代码的位置,因为我已经看到该教程页面 老兄,两者都是 UI 元素,是的,我从网上复制了代码以向您展示示例,除非有更详细的信息我无法在此处解释,否则不需要提供链接.如果你能正确阅读我的答案,你会找到答案,我也可以看到其他人也回答了同样的问题。我建议您阅读有关“从 AsyncTask 访问 UI 元素”的内容,并请注意在 Activity 中以图形方式显示的任何内容都是护理 UI 元素,包括只能从 UI 线程访问的进度对话框。我真的想帮助你而不是别的。【参考方案2】:

使用 UI 线程在 doInBackground 中显示对话框消息参考此https://***.com/a/15757788/6626966

【讨论】:

以上是关于如何更改进度对话框文本的主要内容,如果未能解决你的问题,请参考以下文章

带有动画更改的自定义进度对话框的大小

显示没有文本Android的进度对话框

MFC 动态文本控件?

在 Flutter 的登录屏幕中显示循环进度对话框,如何在 Flutter 中实现进度对话框?

在 Win32 中,如何使用更改颜色对话框来更改 STATIC 文本?

进度对话框和后台线程处于活动状态时如何处理屏幕方向更改?