android - 设置对话进度

标签 android progressdialog

我有一个异步任务,它在执行任务时不会添加百分比。它始终保持在 0% 0/100

这是我的代码

     private class getAppInfo extends AsyncTask<String, String, String> {
    /** The system calls this to perform work in a worker thread and
      * delivers it the parameters given to AsyncTask.execute() */
    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        if(showLoading == true){
             dialog = new ProgressDialog(SelfHelp.this);
             dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
             dialog.setMessage("Loading");
             dialog.setIndeterminate(true);
             dialog.setCancelable(false);   
             dialog.setMax(100);
             dialog.setProgress(100);
             dialog.show();
        }
    }

    @Override
    protected String doInBackground(String... urls) {                       
        String xml = null;
        int count = 0;
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(urls[0]);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

            while(count != 100){
                publishProgress(""+count);
                count += 5;
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }                                

        Document doc = parser.GetDomElement(xml);
        NodeList nl = doc.getElementsByTagName("topic");
        getChildElements(nl);                           
        return xml;
    }


    @Override
    protected void onProgressUpdate(String... progress) {
        Log.v("count",progress[0]);
        dialog.setProgress(Integer.parseInt(progress[0]));
   }

    /** The system calls this to perform work in the UI thread and delivers
      * the result from doInBackground() */
    @Override
    protected void onPostExecute(String result) {    
        //dialog.setProgress(100);
        menuList.setAdapter(setListItems(menuItems));
        menuList.setTextFilterEnabled(true);
        if(showLoading == true){
            dialog.dismiss();
            showLoading = false;
        }
    }

它确实进入了 onProgressUpdate 并且计数增加了 5,但进度条没有改变。如何让它递增 5 并正确显示进度?

最佳答案

您的问题与 setIndeterminate(true) 有关:如果您想要进度更新,您应该将其设置为 false。如果您 setIndeterminate(true) 那么 ProgressDialog 将作为经典的 Windows 沙漏

关于android - 设置对话进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12603974/

相关文章:

android - 进度对话框不会立即出现

android - 使用 AsyncTask 进行方形图像旋转的自定义进度对话框

android - 在 android 中更改 progressdialog 和 alertdialog 背景?

android - 一次提示对话框(仅当用户启动应用程序时)

Android:创建 Activity 时系统调用两次getView

android - WindowManager 在 Android OS 6 特定设备上崩溃

java - 具有产品 flavor 的 Android GCM

java - 单击按钮打开键盘

android - SwipeRefreshLayout 需要卡住 UI

java - 如何将进度值从线程传递到 Activity ?