6

listas de referencias La Desarrolladores de Android R.id.progress entre el built-in Ver recursos disponibles.findViewById (android.R.id.progress) devuelve un valor nulo

embargo, cuando emito (en mi clase de actividad) la declaración:

View pv = getWindow().findViewById(android.R.id.progress); 

devuelve null.

devuelve null aun cuando lo uso en conjunción con la clase ProgressBar:

ProgressBar pv = (ProgressBar) getWindow().findViewById(android.R.id.progress); 

y vuelve nula incluso without the getWindow():

ProgressBar pv = (ProgressBar) findViewById(android.R.id.progress); 

Cualquier idea de por qué?

Para asegurarse de que no estoy alucinando, he seguido el consejo de @ Geobits y crearon un nuevo proyecto desde cero, que contiene el código exacta enumerados en the blog post 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 produce un 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) 
+0

¿Qué versión de Android? –

+0

porque no tiene una vista de esa ID que se muestra en la pantalla. – FoamyGuy

+0

@ user1260028 Froyo (2.2) @Tim ¿Qué quiere decir con "no mostrar"? ¿Tiene que estar visible en el momento de esa llamada 'findViewById()'? – ateiob

Respuesta

1

la etiqueta incorporada R.id.progress está diseñado para la clase ProgressBar. Si no tiene un objeto ProgressBar o ProgressBar en su XML, devolverá nulo.

+0

@ ack57 Puedo ver el 'ProgressBar' con mis ojos ... Es cierto, sin embargo, que no hay ninguno en mi XML. Es el ProgressBar incorporado en el sistema. ¿No es ese el propósito de esos recursos 'android.R.id'? * No * necesitan estar en mi XML. – ateiob

+1

No, debe tener una conexión programática a ProgressBar. Simplemente ingresando 'R.id.progress' no obtendrá la ProgressBar más conveniente para usted. –

+0

¿Qué es "conexión programática * a ProgressBar *"? – ateiob

-1

android.R.id.progress se utiliza en conjunción con el ProgressBar.

Comprobar este enlace: http://foo.jasonhudgins.com/2010/03/simple-progressbar-tutorial.html

su uso es por lo tanto mal.

+0

¿A qué te refieres con "tu uso es incorrecto"? Devuelve null incluso cuando uso la clase 'ProgressBar':' ProgressBar pv = (ProgressBar) getWindow(). FindViewById (android.R.id.progress); '. Por favor explique. – ateiob

+0

¿por qué no simplemente utiliza 'findViewById (android.R.id.progress)' sin agregarlo con el método 'getWindow()'? –

+0

¡Yo también lo hice! Mismo nulo ... – ateiob

0

editado

Lo siento, debe haber contado hasta mal. eso es lo que obtengo por no pegar. De cualquier manera, ¿hay alguna razón por la que no solo use uno de ProgressBarconstructors? Aquí está la línea del último proyecto he usado un bar en:

mProgress = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 
+1

El código publicado es una copia exacta y pega de mi propia clase 'ProgressBarExampleActivity.java' produciendo esa excepción. La excepción del puntero nulo se genera en la línea 44: 'mProgress.setProgress (progress);'. El nulo es para mProgress. Mismo problema ... ¿Ideas? Gracias. – ateiob

+1

Para verificar esto, verifico 'if (mProgress == null)' justo después de 'findViewById()' en onCreate() y emite un mensaje de error en LogCat. Es nulo. Yo * estoy * mirando el lugar correcto. Siéntase libre de copiar este código textualmente e inténtelo en su sistema. En Eclipse solo toma 2 minutos crear un nuevo proyecto desde cero que contenga el mismo código exacto. – ateiob

+1

Ah, mi respuesta incorrecta y actualizada. – Geobits

-1

De Eclipse, lleve a cabo un proyecto de limpieza haciendo clic en 'Proyecto'> 'Clean ...', haga clic en la casilla junto a su proyecto, y haga clic en Aceptar'. Y trata de construir tu proyecto nuevamente.

Cuestiones relacionadas