【问题标题】:Horizontal progress bar does not update its status水平进度条不更新其状态
【发布时间】:2013-03-07 06:42:54
【问题描述】:

我正在尝试在我的活动中显示水平进度条“Not ProgressDialog”,如下所示

这是我的 xml 文件包含的内容

<ProgressBar
    android:id="@+id/pdialog"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"        
    android:indeterminate="true"
     />

我正在尝试通过设置 pdialog.setProgress() 使用 AsyncTask 类更新其状态,但它没有显示任何进度,它适用于 progressdialog 但不适用于水平进度条。

public class MainActivity extends Activity {

private SQLiteDatabase db;
private Cursor cursor;
private ProgressBar pdialog;
private ImageButton btn;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.start);
    btn = (ImageButton) findViewById(R.id.startbtn);
    pbar = (ProgressBar) findViewById(R.id.progressBar1);
    pdialog = (ProgressBar) findViewById(R.id.pdialog);
    pdialog.setMax(100);
    pdialog.setProgress(20);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            pdialog.setVisibility(View.VISIBLE);
            new DownloadFilesTask().execute();

        }
    });
}

private class DownloadFilesTask extends AsyncTask<Void, Integer, Integer> {

    int load = 1;

    protected Integer doInBackground(Void... params) {

        try {
                load = 10 * i;
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        pdialog.setProgress(load);
                    }
                });

            }

        } catch (Exception e) {     

        }   

    }

    protected void onProgressUpdate(Integer... progress) {

        if (progress[0] == 100) {
            pdialog.setVisibility(View.INVISIBLE);          

        }
    }

    protected void onPostExecute(Integer params) {      

    }

}
}

【问题讨论】:

标签: android android-asynctask progress-bar


【解决方案1】:

如果load 变量被正确更改:

而不是这个:

MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        pdialog.setProgress(load);
                    }
                });

你可以使用:

publishProgress(load);

会自动调用 UI 线程:

protected void onProgressUpdate(Integer... progress) {
    int p = progress[0];
    if (p >= 100) {
        pdialog.setVisibility(View.INVISIBLE);          
    }else{
       pdialog.setProgress(p);
    }
}

更新:

删除android:indeterminate="true",如其他答案中指出的那样。

【讨论】:

  • 我尝试将我的 setprogress() 放在 OnProgressUpdate 中,但结果与它的 nt 更新相同
  • @VivekSingh 在pdialog.setProgress(p) 处添加断点,在调试模式下运行并检查:代码是否到达了这一点?如果是,progress 变量的值是多少?。
  • 好搭档.. +1 删除 android:indeterminate="true"
【解决方案2】:

在您的布局文件中,请从ProgressBar 元素中删除以下属性android:indeterminate="true"

【讨论】:

    【解决方案3】:

    我也有同样的问题,但是 我发现问题是接口 View.OnClickListener()。 当 pbar 从 btn.setOnClickListener(new View.OnClickListener() {}) 中取出时,它运行良好。否则,它没有更新。 然后,我创建了一个将 pbar 传递给 OnXXXClickListener 的构造函数。

    private class OnXXXClickListener implements View.OnClickListener() {
            private ProgressBar bar;
    
            public OnXXXClickListener(ProgressBar bar) {
                this.bar = bar;
            }
    
            @Override
            public void onClick(View v) {
    
                bar.setProgess(50);
                new DownloadFilesTask().execute();
    
            }
    
    }

    那么 pbar 就可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2017-01-12
      相关资源
      最近更新 更多