2012-01-06 6 views
9

Utilizando eclipse y Android SDK, administre una aplicación de prueba simple con un botón y una barra de progreso. Todo funciona bien, excepto que no quería que ProgressBar moviera el botón, cuando ProgressBar se hizo visible, así que solo para probar cambié el orden que están definidos en el archivo res/layout/main.xml (que usa un LinearLayout). Al compilar y ejecutar, obtengo una ClassCastException en la línea "final ProgressBar ..." a continuación.Orden modificada en main.xml, ahora obtengo ClassCastException

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* 01-06 14:37:39.590: E/AndroidRuntime(863): java.lang.RuntimeException: 
     java.lang.ClassCastException: android.widget.Button cannot be cast to 
     android.widget.ProgressBar */ 
    final ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressBar1); /* here */ 
    progressbar.setVisibility(ProgressBar.GONE); 

    final Button exebutton = (Button)findViewById(R.id.button1); 
    exebutton.setOnClickListener(new View.OnClickListener() 
    // etc... 

Ahora, entiendo lo que dice ClasCastException y significa, simplemente no entiendo por qué aparece. No estoy intentando lanzar un botón a una barra de progreso. No lo entiendo ...

+0

¿podría agregar también su archivo main.xml? Parece que estás intentando lanzar un botón como una barra de progreso. – Ivan

+1

No, no lo soy, al menos conscientemente (ver la publicación). Fue el R.java el que no se actualizó, ver abajo. – OppfinnarJocke

+0

Intenta limpiar y reconstruir tu proyecto. Y pegue el archivo main.xml para que podamos verificar si hay otros problemas (intente también eliminar un objeto y volverlo a agregar). – Ivan

Respuesta

20

Intente limpiar el proyecto para que la clase R se vuelva a generar. A veces los valores no se actualizan.

+1

+1 para limpieza. El SDK de Android puede llegar a "confundirse" a veces, este es uno de esos. A menudo es mejor limpiar cuando se realizan cambios en los archivos XML. Entre el comportamiento predeterminado de Eclipse y lo que hace el SDK, encuentro que el proyecto a menudo obtiene errores de compilación o de tiempo de ejecución. En caso de duda, "limpiar" ... –

+1

¡Ah! La limpieza lo hizo. Gracias – OppfinnarJocke

+1

Excelente. Por favor, considere aceptar la respuesta para que no quede sin respuesta. – sfratini

6

Parece que esta línea:

final ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressBar1); /* here */ 

es emitir un botón a la barra de progreso.

Esto significa que el findViewById devuelve el botón para R.id.progressBar1.

Como dices que cambiaste el orden, parece que esta identificación todavía corresponde al botón. Esto apunta a un problema con el archivo generado. Haría un proyecto/limpieza.

Cuestiones relacionadas