我正试图在我的活动上显示水平进度条“ 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) {
}
}
}
答案 0 :(得分:4)
如果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"
,如其他答案所述。
答案 1 :(得分:4)
在您的布局文件中,请从<{1}}元素中删除以下属性android:indeterminate="true"
。
答案 2 :(得分:0)
我有同样的问题,但是 我发现问题是接口View.OnClickListener()。 当pbar被放出btn.setOnClickListener(新的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可以正常运作。