android progressBar non aggiorna la visualizzazione / disegni di avanzamento

due barre che mostrano il progresso di un gioco. Se l'utente ottiene i punti o il tempo è ecc. Ecc. I progressbar devono essere aggiornati:

private TextView tv; private ProgressBar levelHoldBar; private ProgressBar levelUpBar; //... private void updateViews() { // ... levelHoldBar.setMax(currentLevel.getThreshold()); levelHoldBar.setProgress(currentPoints > currentLevel.getThreshold() ? currentLevel.getThreshold() : currentPoints); levelUpBar.setMax(nextLevel.getThreshold()); levelUpBar.setProgress(currentPoints > nextLevel.getThreshold() ? nextLevel.getThreshold() : currentPoints); tv.setText(currentPoints+"/"+currentLevel.getThreshold()); Log.d(TAG, "hold prog/max "+levelHoldBar.getProgress()+"/"+levelHoldBar.getMax()); Log.d(TAG, "up prog/max "+levelUpBar.getProgress()+"/"+levelUpBar.getMax()); } 

vale a dire. Uscite:

  • Come mostrare l'image nella row di tabella in base alla dimensione
  • Tasca Android Gradle: connectedInstrumentTest per la creazione di rilascio?
  • Come importre set di icone nel progetto Android Studio
  • Lettura dei codici a barre con android
  • Google App Engine Java e Android per iniziare
  • come passare un argomento a un test android junit (test parametrizzato)
  •  12-03 17:48:33.918: DEBUG/MainActivity(6829): hold prog/max 20/20 12-03 17:48:33.918: DEBUG/MainActivity(6829): up prog/max 20/50 

    Il Log.d (…) alla fine mostra SEMPRE i valori corretti, ma SOMETIMES le barre visive dei progressbar non mostrano i progressi corretti. Esse mostrano i progressi precedentemente impostati anche se i getters per "max" e "progress" restituiscono valori corretti (nell'esempio la barra mostra circa il 20% (invece del 100%) per il livelloHoldBar e circa il 2% (invece di 40 %) per il livelloUp-bar). Non riesco a capire perché il log-output sia corretto, ma i drawables sono sbagliati !? Il TextView (tv) è aggiornato correttamente! Cosa sta succedendo qui? Come posso risolvere questo problema?

  • Come impostare l'intervallo di tempo utilizzando la barra di ricerca
  • salvare un file json nella memory interna
  • Invito Firebase non funziona in APK di creazione di rilascio
  • Come posso proteggere un tag Mifare classico che contiene un messaggio NDEF?
  • Retrofit, metodo onResponse non funziona
  • Android: perdita di memory dovuta a AsyncTask
  • 8 Solutions collect form web for “android progressBar non aggiorna la visualizzazione / disegni di avanzamento”

    SOLUZIONE : è un bug in ProgressBar!

    finalmente … credo di aver trovato la soluzione …

    questo non funziona come ci si aspetterebbe:

     bar.setMax(50); bar.setProgress(20); bar.setMax(20); bar.setProgress(20); 

    Il setProgress (…) non sembra triggersre l'aggiornamento sul disegni se lo stesso valore viene ripreso. Ma non è anche innescato durante il setMax. Quindi l'aggiornamento manca. Sembra un Bug nell'Android ProgressBar! Questo mi ha portto circa 8 ore .. lol: D

    Per risolvere questo problema, sto facendo un bar.setProgress (0) prima di each aggiornamento … questa è solo una soluzione, ma funziona per me come previsto:

     bar.setMax(50); bar.setProgress(20); bar.setProgress(0); // <-- bar.setMax(20); bar.setProgress(20); 

    Ho potuto get questo per funzionare con View.post() :

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // ... mSeekBar.post(new Runnable() { @Override public void run() { mSeekBar.setProgress(percentOfFullVolume); } }); } 

    Come con le risposte SKT non mi è chiaro perché questo dovrebbe funzionare quando questo non lo fa

     mSeekBar.setProgress(percentOfFullVolume); 

    Tuttavia, sembra essere vero fino a includere Android Lollipop.

    Per me, call setMax() prima che setProgress() funzionasse per qualche motivo.

    È ansible utilizzare un gestore per aggiornare la barra di progressbar

     Handler progressBarHandler = new Handler(); ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);; progressBarHandler .post(new Runnable() { public void run() { bar.setProgress(progress); } }); 

    Nel mio caso creo VerticalSeekBar, e la soluzione di Stuck non funziona. Dopo ore, ho trovato una soluzione:

     @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); } 

    Spero che aiutino chiunque.

    Crea updateThumb (); metodo in VerticalSeekbar

     public void updateThumb(){ onSizeChanged(getWidth(), getHeight(), 0, 0); } 

    Quindi call il metodo di aggiornamento del pollice dopo aver impostato il progresso.

     seekBar.setProgress((int) progress); seekBar.updateThumb(); 

    il suo lavoro per me in calzature verticalseekbar

    Ringraziamenti bloccati per il post affermando che c'è un bug Android. Ho anche una barra di ricerca verticale.

    Il problema era quando stavo cambiando il progresso disegnabile. Il drawable sarebbe stato aggiornato, ma il bar sarebbe stato impostato su 0 e sarà un formato molto piccolo. Sono stato in grado di farlo ridimensionare con updateThumb (), ma il progresso era ancora a 0.

    Per impostare il progresso indietro al valore originale ho aggiunto un mylayer.setLevel (…) ;. Ho trovato questo leggendo il codice sorgente di ProgressBar.doRefreshProgress (…). Potresti essere in grado di fare seekBar.getProgressDrawable.setLevel(...) .

     LayerDrawable mylayer = //new LayerDrawable() seekBar.setProgressDrawable(mylayer); seekBar.updateThumb(); seekBar.setProgress((int) chLevel); mylayer.setLevel((int) (chLevel / MAX_LEVEL * 10000)); 

    Questo ha funzionato per me …

    OneFragmen.java

     public class OneFragment extends Fragment{ public OneFragment() { // Required empty public constructor } private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; int progress=0; private Handler handler = new Handler(); TextView txtProgress; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { View view = inflater.inflate(R.layout.fragment_one, container, false); getActivity().setTitle(R.string.app_name); final ProgressBar spinner = (ProgressBar) view.findViewById(R.id.outerProgressBar); Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.circular); txtProgress = (TextView)view.findViewById(R.id.txtProgress); spinner.setProgressDrawable(drawable); spinner.setSecondaryProgress(100); spinner.setMax(100); spinner.setProgress(0); new Thread(new Runnable() { @Override public void run() { while (progress < 100) { progress += 1; handler.post(new Runnable() { @Override public void run() { spinner.setProgress(progress); txtProgress.setText(progress + "%"); } }); try { Thread.sleep(28); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); return view; } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.