Изменен порядок в main.xml, теперь я получаю ClassCastException

Используя eclipse и Android SDK, я создал простое тестовое приложение с кнопкой и индикатором выполнения. Все работает нормально, за исключением того, что я не хотел, чтобы ProgressBar перемещал кнопку, когда ProgressBar был сделан видимым, поэтому просто для тестирования я изменил порядок, в котором они определены в файле res/layout/main.xml (который использует Линейный макет). При компиляции и запуске я получаю ClassCastException в строке "final ProgressBar..." ниже.

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...

Теперь я понимаю, что говорит и означает ClasCastException, я просто не понимаю, почему оно появляется. Я не пытаюсь перевести кнопку в ProgressBar. я не понимаю...


person OppfinnarJocke    schedule 06.01.2012    source источник
comment
пожалуйста, не могли бы вы также добавить файл main.xml? Кажется, вы пытаетесь использовать кнопку как ProgressBar.   -  person Ivan    schedule 06.01.2012
comment
Нет, не сознательно, по крайней мере (см. пост). Это была R.java, которая не обновлялась, см. ниже.   -  person OppfinnarJocke    schedule 06.01.2012
comment
Попробуйте очистить и перестроить свой проект. И вставьте файл main.xml, чтобы мы могли проверить, есть ли другие проблемы (попробуйте также удалить один объект и добавить его снова).   -  person Ivan    schedule 06.01.2012


Ответы (2)


Попробуйте очистить проект, чтобы снова сгенерировать класс R. Иногда значения не обновляются.

person sfratini    schedule 06.01.2012
comment
+1 за уборку. Android SDK иногда может запутаться — это один из них. Часто лучше очистить при внесении изменений в XML-файлы. Между поведением Eclipse по умолчанию и тем, что делает SDK, я обнаружил, что проект часто получает ошибки сборки или выполнения. Если сомневаетесь, очистите... - person Richard Le Mesurier; 06.01.2012
comment
Превосходно. Пожалуйста, примите ответ, чтобы он не остался без ответа. - person sfratini; 06.01.2012

Это выглядит как эта строка:

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

отбрасывает кнопку на индикатор выполнения.

Это означает, что findViewById возвращает кнопку для R.id.progressBar1.

Поскольку вы говорите, что изменили порядок, похоже, что этот идентификатор по-прежнему соответствует кнопке. Это указывает на проблему с созданным файлом. Я бы сделал Project/Clean.

person Kamchatka    schedule 06.01.2012