FindViewById (android.R.id.progress) devuelve null
La lista de referencias de desarrolladores de Android lista R.id.progress entre los recursos de vista incorporados disponibles.
Sin embargo, cuando emito (en mi clase de actividad) la declaración:
- Android seekbar establecer estilo personalizado con nueve imágenes de parche
- Botón de retroceso de Android y cuadro de diálogo de progreso
- Mostrar / ocultar ProgresBar en ActionBar en android API inferior a 11
- Mostrar una barra de progreso cuando se está cargando una actividad
- Android ExoPlayer onProgressChanged
View pv = getWindow().findViewById(android.R.id.progress);
Devuelve null.
Devuelve null incluso cuando lo uso en conjunción con la clase ProgressBar
:
ProgressBar pv = (ProgressBar) getWindow().findViewById(android.R.id.progress);
Y devuelve null incluso sin getWindow () :
ProgressBar pv = (ProgressBar) findViewById(android.R.id.progress);
¿Alguna idea de por qué?
Para asegurarse de que no estoy alucinando, seguí el consejo @ Geobits y creó un nuevo proyecto desde cero, que contiene el código exacto que aparece en la entrada del blog recomendado por @ArunGeorge a continuación:
package com.droidworks; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.ProgressBar; public class ProgressBarExampleActivity extends Activity { private ProgressBar mProgress; private MyThread mBgThread; private final Handler mHandler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mProgress = (ProgressBar) findViewById(android.R.id.progress); mBgThread = (MyThread) getLastNonConfigurationInstance(); if (mBgThread == null) { mBgThread = new MyThread(); mBgThread.start(); } mHandler.post(mThreadWatcher); } @Override public Object onRetainNonConfigurationInstance() { return mBgThread; } @Override protected void onPause() { mHandler.removeCallbacks(mThreadWatcher); super.onPause(); } private Runnable mThreadWatcher = new Runnable() { public void run() { int progress = mBgThread.getProgress(); mProgress.setProgress(progress); if (progress != 100) mHandler.postDelayed(this, 50); } }; static class MyThread extends Thread { private int _progress = 0; public void run() { for (; _progress < 100; _progress++) { try { Thread.sleep(100); } catch (InterruptedException ignored) { } } } private int getProgress() { return _progress; } } }
Efectivamente, este código genera una NullPointerException
:
at com.droidworks.ProgressBarExampleActivity$1.run(ProgressBarExampleActivity.java:44) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method)
- Temporizador de cuenta atrás Android La barra de progreso circular no coincide con el temporizador
- Diálogo de progreso personalizado Android
- AsyncTask o Handler- ¿Cuál es mejor para la interacción y el procesamiento de la red que consumen mucho tiempo?
- Ancho horizontal de la barra de progreso en la barra de acciones
- AsyncTask onPostExecute no se ejecuta en el hilo principal?
- Cancelar ProgressDialog y detener el hilo
- Android: muestra el círculo de progreso como Google hace en sus aplicaciones
- Progreso de la ventana de presentación pero no Progreso de ActionBar (utilizando la biblioteca v7 compat)
La R.id.progress
incorporada de R.id.progress
está diseñada para la clase ProgressBar
. Si no tiene un objeto ProgressBar
o un ProgressBar
en su XML, entonces devolverá null.
EDITADO
Lo siento, debo haberlo contado mal. Eso es lo que obtengo por no pegar. De cualquier manera, ¿hay alguna razón por la que no use uno de los constructores de ProgressBar
? Aquí está la línea del último proyecto en el que usé un bar:
mProgress = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
android.R.id.progress
se utiliza junto con ProgressBar
.
Consulta este enlace: http://foo.jasonhudgins.com/2010/03/simple-progressbar-tutorial.html
Su uso es así incorrecto.
Desde Eclipse, realice un proyecto limpio haciendo clic en 'Proyecto'> 'Limpiar …', haga clic en la casilla de verificación junto a su proyecto y haga clic en 'Aceptar'. Y trate de construir su proyecto de nuevo.
- Búsqueda de una cadena en un elemento de elemento String-Array
- Cómo hacer que el botón transparente en mi aplicación sea visible