Прежде всего, спасибо, что прочитали это.У меня проблемы с обновлением прогресса из моего пользовательского ProgressBar через внутренний класс AsyncTask.Я использую 9patch для фона и рисования прогресса.Это просто не обновлять.Он остается заполненным, как в максимальном значении, я использую onProgressUpdate () для вызова invalidate () и обновления потока пользовательского интерфейса.
Вот как это выглядит сейчас, оно становится видимым ипросто остается там все заполнено: http://imageshack.us/photo/my-images/651/mobicashprogressbar.png/
- Индикатор выполнения должен быть виден только после того, как пользователь завершит заполнение формы.
- Есть еще один внутренний AsyncTask, обрабатывающий кнопку отправки SMS, которая соединяется свеб-сервис.
ЗДЕСЬ КОД:
public void setTimerProgress(int progress){
progressBar.setProgress(progress);
}
public void updateProgress(){
progressBar.invalidate();
}
public void showProgress(){
progressBar.setVisibility(View.VISIBLE);
}
//Classe auxiliar para controle da progress bar
private class TimerProgress extends AsyncTask<Void, Void, Void>{
private int start;
private final int OTP_TIMEOUT = 900000;
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgress();
start = (int) System.currentTimeMillis();
}
@Override
protected Void doInBackground(Void... param) {
int timer = (int) System.currentTimeMillis() - start;
while (timer <= OTP_TIMEOUT){
setTimerProgress(timer);
timer = (int) System.currentTimeMillis() - start;
publishProgress();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
updateProgress();
}
}
ЗДЕСЬ XML:
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_gravity="center_horizontal"
android:visibility="invisible"
android:id="@+id/progress_bar_timer"
android:max="900000"
android:progress="3000"
android:progressDrawable="@drawable/progress_bar"
android:background="@drawable/progress_background"
android:layout_width="fill_parent"
android:layout_height="25dip"
android:layout_marginRight="73sp"
android:layout_marginLeft="70sp">
</ProgressBar>
ЗДЕСЬ ОДНО МЕСТО, ГДЕ Я ЗОВУЮ ЕГО
@Override
public void onClick(View v) {
if (v.getId() == R.id.refresh_otp) {
saveParametersForOTP();
if (edtIniPin.getText().length() == pinLengthInt) {
try {
disableEditText(edtIniPin);
disableEditText(edtValue);
edtOTP.setText(Facade.getInstance().nextOTP(Facade.getInstance().getPin(), Facade.getInstance().getValue()));
//Inicia o timer da progressbar
new TimerProgress().execute();
Помогите?: D
ОБНОВЛЕНИЕ:
Для тестовых целей я установил OTP_TIMEOUT на 50000, сделал следующие изменения в коде и удалил свойства рисования 9patch, чтобы ониспользуйте родные чертежи для бара.Это работает, однако, когда я использую изображения для настройки панели, кажется, что та же самая старая проблема происходит.Это статично, все заполнено как раньше.
private final int OTP_TIMEOUT = 50000;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i("PROGRESS", "Chegou no PreExecute!");
showProgress();
ENABLE_REFRESH = false;
start = (int) System.currentTimeMillis();
}
@Override
protected Void doInBackground(Void... param) {
int timer = (int) System.currentTimeMillis() - start;
while (timer <= OTP_TIMEOUT){
Log.i("PROGRESS", "Chegou no while!");
setTimerProgress((int)timer);
timer = (int) System.currentTimeMillis() - start;
publishProgress();
if (timer >= OTP_TIMEOUT) {
ENABLE_REFRESH = true;
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
Log.i("PROGRESS", "Chegou no Progress Update!");
updateProgress();
}