java - 进度对话框显示但没有进度条显示且消息未更新

标签 java android progressdialog

我有一个从 fragment 调用的类。进度更新被调用,但消息不会更新。我也没有看到任何进度条或微调器。只是标题和消息,看到了一些类似的问题,但进度条根本没有显示。此外,我的消息在 onProgressUpdate 中根本不会更新,但打印出的值确实表明它在 onProgressUpdate 内部递增。

编辑:这是我开始任务的方式

DownloadFilesTask download = new DownloadFilesTask();
download.execute(urls.toArray(new String[urls.size()]));

这是类

private class DownloadFilesTask extends AsyncTask<String, Integer, Long> {

ProgressDialog progressDialog;

@Override
protected void onPreExecute()
{
    progressDialog = ProgressDialog.show(getActivity(), "Downloading","Downloaded 0/"+urls.size(), false);
    progressDialog.setProgress(0);
    progressDialog.setMax(urls.size());
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
}

@Override
protected Long doInBackground(String[] urls) {
    int count = urls.length;
    long totalSize = 0;
    for (int i = 0; i < count; i++) {
            //Do things in background here
            publishProgress(new Integer[] {i});
    }
    return totalSize;
}

@Override
protected void onProgressUpdate(final Integer... progress) {
    System.out.println(progress[0]); //This does print correctly
    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            progressDialog.setProgress(progress[0]);
            progressDialog.setMessage("Downloaded "+ progress[0] +"/"+urls.size());
        }
    });
}

@Override
protected void onPostExecute(Long result) {
    progressDialog.dismiss();
    Toast t = Toast.makeText(getActivity(), "Downloaded", Toast.LENGTH_LONG);
    t.show();
}

最佳答案

问题在于 ProgressDialog 的初始化方式。

将您的 onPreExecute 替换为:

@Override
protected void onPreExecute() {
    progressDialog = new ProgressDialog(activity);
    progressDialog.setTitle("Downloading");
    progressDialog.setMessage("Downloaded 0/" + urls.size());
    progressDialog.setIndeterminate(false);
    progressDialog.setProgress(0);
    progressDialog.setMax(urls.size());
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.show();
}

本质上,您需要在调用 show 之前调用 setProgressStyle

此外,您可以删除 onProgressUpdate 中的 runOnUiThread 代码,因为 onProgressUpdate 是在 UI 线程上调用的。

关于java - 进度对话框显示但没有进度条显示且消息未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489835/

相关文章:

java - 如何让我的 Java 应用程序在连接时向 Oracle 标识自己?

java - 如何调试 mockito 模拟/ stub /匹配器?

android - YouTube Android Player API在Amazon Fire TV上不起作用

java - 使用 FusedlocationProviderClient Api 在 Android 中进行实时位置跟踪的问题

java - progressDialog 在 fragment 打开之前被关闭

java - 错误 JAVA_HOME 未正确定义

java - 我如何让 ActionListener 监听按键?

java - 将 android hashmap 转换为 kotlin

android - 只有创建 View 层次结构的原始线程才能触摸其 View 。安卓

Android - 如何在 UI 上嵌入进度对话框?