Android 水平进度条不更新其状态

Android 水平进度条不更新其状态,android,android-asynctask,progress-bar,Android,Android Asynctask,Progress Bar,我试图在我的活动中显示水平进度条“非进度对话框”,如下所示 下面是我的xml文件包含的内容 <ProgressBar android:id="@+id/pdialog" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inde

我试图在我的活动中显示水平进度条“非进度对话框”,如下所示

下面是我的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) {      

    }

}
}
公共类MainActivity扩展活动{
专用数据库数据库;
私有游标;
私人ProgressBar pdialog;
专用图像按钮;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
btn=(图像按钮)findViewById(R.id.startbtn);
pbar=(ProgressBar)findViewById(R.id.progressBar1);
pdialog=(ProgressBar)findviewbyd(R.id.pdialog);
pdialog.setMax(100);
pdialog.setProgress(20);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
pdialog.setVisibility(View.VISIBLE);
新建下载文件任务().execute();
}
});
}
私有类DownloadFilesTask扩展了AsyncTask{
int荷载=1;
受保护的整数doInBackground(Void…params){
试一试{
荷载=10*i;
MainActivity.this.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
pdialog.setProgress(加载);
}
});
}
}捕获(例外e){
}   
}
受保护的void onProgressUpdate(整数…进度){
如果(进度[0]==100){
pdialog.setVisibility(View.INVISIBLE);
}
}
受保护的void onPostExecute(整数参数){
}
}
}

如果正确更改了
加载
变量:

与此相反:

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:Undeterminate=“true”。

在布局文件中,请从
ProgressBar
元素中删除以下属性
android:Undeterminate=“true”

我有同样的问题,但是 我发现问题在于接口视图。OnClickListener()。 当pbar从btn.setOnClickListener(new View.OnClickListener(){})中取出时,它工作得很好。否则,它不会更新。 然后,我创建了一个构造函数,将pbar传递到OnXXXClickListener中。
私有类OnXXXClickListener实现View.OnClickListener(){
私人酒吧;
公共OnXXXClickListener(进度条){
这个.bar=bar;
}
@凌驾
公共void onClick(视图v){
设置进度(50巴);
新建下载文件任务().execute();
}

}
你的i在哪里递增…?我有很长的代码,所以我只是把它缩短了,我在doinbackground()中递增[i],但它根本不更新。请尝试使用任何方法,并检查i的值是否正确递增。我尝试将我的setprogress()放入在OnProgressUpdate中,但结果与其nt相同updating@VivekSingh在
pdialog.setProgress(p)
处添加断点,在调试模式下运行并检查:代码是否达到此点?。如果是,则
进度
变量的值是多少+1用于删除android:undeterminate=“true”