¿Cómo usar setProgressDrawable () correctamente?
Estoy teniendo problema con la fijación de un nuevo Drawable a mi ProgressBar.
Si utilizo el método onCreate () de setProgressDrawable () funciona muy bien. Pero cuando trato de llamar al mismo método dentro de una devolución de llamada de manejador no funciona y desaparece la barra de progreso.
- ¿Cómo dar una barra de progreso para la descarga?
- ¿Cómo puedo configurar el tamaño de un Android ProgressBar mediante programación?
- Barra de progreso de Android en el botón
- Progreso personalizado no se puede mostrar a veces
- Mostrar barra de progreso durante la descarga
¿Puede alguien explicar este comportamiento? ¿Como puedó resolver esté problema?
- android progressBar no actualiza el progreso view / drawable
- Cómo cambiar el color de la barra de progreso en Android? - (Traté de una manera, y no funciona)
- Necesito saber cuánto bytes se ha cargado para actualizar una barra de progreso android
- Android - ¿Qué es un progreso secundario en ProgressBar?
- ¿Cómo eliminar el número de barra de progreso en la parte inferior de la barra de progreso?
- Android progressBar no se muestra
- (ProgressBar) findViewById (R.id.ProgressBar) devuelve null
- Android Indeterminado ProgressBar no gira
Bumped en este problema yo y me las arreglé para conseguir que funcione 🙂
Utilicé el AsyncTask
para manejar las tareas / subprocesos de fondo, pero la idea debería ser la misma que usar Runnable/Handler
(aunque AsyncTask
se siente más agradable imo).
Así que esto es lo que hice … poner setContentView(R.layout.my_screen);
En el método onPostExecute
! (Es decir, en lugar del método onCreate
)
Así que el código se parece a esto:
public class MyScreen extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.my_screen); !!! Don't setContentView here... (see bottom) new MySpecialTask().execute(); } private int somethingThatTakesALongTime() { int result; // blah blah blah return result; } private void updateTheUiWithResult(int result) { // Some code that changes the UI // For exampe: TextView myTextView = (TextView) findViewById(R.id.result_text); myTextView.setText("Result is: " + result); ProgressBar anyProgressBar = (ProgressBar) findViewById(R.id.custom_progressbar); anyProgressBar.setProgressDrawable(res.getDrawable(R.drawable.progressbar_style)); anyProgressBar.setMax(100); anyProgressBar.setProgress(result); } private class MySpecialTask extends AsyncTask<String, Void, Integer> { ProgressDialog mProgressDialog; @Override protected void onPreExecute() { mProgressDialog = ProgressDialog.show(MyScreen.this, "", "Calculating...\nPlease wait...", true); } @Override protected Integer doInBackground(String... strings) { return somethingThatTakesALongTime(); } @Override protected void onPostExecute(Integer result) { mProgressDialog.dismiss(); setContentView(R.layout.my_screen); // setContent view here... then it works... updateTheUiWithResult(result); } } }
Para ser honesto, por qué usted necesita llamar a setContentView
en onPostExecute
No tengo idea … pero al hacerlo significa que puede configurar estilos personalizados para sus barras de progreso (y no desaparecen en usted!)
downloadingBar.setProgress(0); Drawable progressDrawable = getResources().getDrawable(R.drawable.download_progressbar_pause_bg); progressDrawable.setBounds(downloadingBar.getProgressDrawable().getBounds()); downloadingBar.setProgressDrawable(progressDrawable); downloadingBar.setProgress(mCurrentPercent);
- Primero debe restablecer el progreso a cero
- Establecer los límites de progreso
- Establecer nuevo progreso
- Establecer nuevo progreso
Tal vez poner el código en un hilo que no es el hilo principal. Si desea trabajar con la interfaz de usuario, debe hacerlo en el subproceso principal 🙂
También estaba enfrentando el mismo problema pero en mi caso se debe al uso del método Drawable.mutate (). Cuando quité ese método comenzó a trabajar muy bien. También me di cuenta de que este problema existe debajo de api nivel-21 (piruleta).
- Otras herramientas de desarrollo para Android
- Vista personalizada falta constructor utilizado por las herramientas para el adaptador