Изменен порядок в main.xml, теперь я получаю ClassCastException - PullRequest
9 голосов
/ 06 января 2012

Используя eclipse и Android SDK, я управлял простым тестовым приложением с Button и ProgressBar.Все работает нормально, за исключением того, что я не хотел, чтобы ProgressBar перемещал кнопку, когда ProgressBar был сделан видимым, поэтому просто для тестирования я изменил порядок их определения в файле res / layout / main.xml (который используетLinearLayout).После компиляции и запуска я получаю 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.Я не понимаю ...

Ответы [ 2 ]

20 голосов
/ 06 января 2012

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

6 голосов
/ 06 января 2012

Похоже на эту строку:

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

вызывает кнопку на индикатор.

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

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

...