2013-03-07 15 views
7

próbuję pokazać poziomy pasek postępu „Nie ProgressDialog” na mojej aktywności jak ten enter image description herePoziomy pasek postępu nie aktualizuje swój status

Oto co mój plik xml zawiera

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

Próbuję zaktualizować jego status przy użyciu klasy AsyncTask, ustawiając pdialog.setProgress(), ale nie pokazuje żadnego postępu, działa z progressdialog, ale nie z poziomym paskiem postępu.

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

gdzie Twoja wartość rośnie? –

+0

dawna kod więc po prostu wyciąć go na krótko, ja zwiększając [i] w moim doinbackground(), ale jej nie updataing wcale –

+0

spróbować z tym każdy http://eagle.phys.utk.edu/guidry /android/progressBarExample.html i http://blog.webagesolutions.com/archives/170 a także sprawdzić wartość i prawidłowo czy zwiększając lub nie – itsrajesh4uguys

Odpowiedz

4

Jeśli load zmienna zostanie zmieniona prawidłowo:

Zamiast tego:

MainActivity.this.runOnUiThread(new Runnable() { 

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

Można użyć:

publishProgress(load); 

które automatycznie zadzwoni na UI Temat:

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

UPDATE:

usuń android:indeterminate="true" jak wskazano w drugiej odpowiedzi.

+0

próbowałem poprzez umieszczenie mojego setProgress() w OnProgressUpdate ale wynik jest taki sam, jego nt aktualizowanie –

+0

@VivekSingh Dodaj punkt przerwania w 'pdialog.setProgress (p)', uruchom w trybie debugowania i sprawdź: Czy kod osiągnął ten punkt?. Jeśli tak, to jaka jest wartość zmiennej 'progress'? –

+1

Znakomity mate .. +1 dla usunięcia android: indeterminate = "true" –

4

W pliku układu proszę usunąć następujący atrybut android:indeterminate="true" z elementu ProgressBar.

+0

To zadziałało. kudos !! –

0

Miałem to samo pytanie, ale Znalazłem problem jest View.OnClickListener interfejs(). Gdy pbar został wyłączony z pliku btn.setOnClickListener (new View.OnClickListener() {}), działało dobrze. W przeciwnym razie nie zaktualizowano. Następnie stworzyłem konstruktora, który przekazał pbar do 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(); 
 

 
     } 
 

 
}

Następnie pbar może działać dobrze.