2013-03-07 2 views
7

Я пытаюсь показать горизонтальный прогресс бар «Не ProgressDialog» на моей деятельности, как этот enter image description hereГоризонтальный индикатор не обновляет свой статус

здесь является то, что содержит мой файл XML

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

Я пытаюсь обновить его статус с помощью AsyncTask Class, установив pdialog.setProgress(), но не показывая никакого прогресса, он работает с 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

где ваше i увеличивается ...? –

+0

У меня есть длинный код, поэтому я просто сокращаю его до короткого, я увеличиваю [i] в ​​моем doinbackground(), но его не updataing вообще –

+0

попробуйте с этим любой http://eagle.phys.utk.edu/guidry /android/progressBarExample.html и http://blog.webagesolutions.com/archives/170, а также проверить правильность значения i, независимо от того, увеличивается ли оно или нет. – itsrajesh4uguys

ответ

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); 
    } 
} 

UPDATE:

удалить android:indeterminate="true", как указано в другой ответ.

+0

Я попытался поставить свой setprogress() в OnProgressUpdate, но результат такой же nt update –

+0

@VivekSingh Добавить точку останова на 'pdialog.setProgress (p)', запустить в режиме отладки и проверить: достиг ли код этой точки?. Если это так, то что такое значение переменной progress. –

+1

Превосходный помощник .. +1 для удаления android: indeterminate = "true" –

4

В вашем файле макета, пожалуйста, удалите следующий атрибут android:indeterminate="true" от ProgressBar элемент.

+0

Спасибо, сработало. kudos !! –

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(); 
 

 
     } 
 

 
}

Тогда пбар может хорошо работать.

Смежные вопросы