Неожиданное исключение ClassCastException с findViewById

Я играю с «поисковым словарем», чтобы заняться разработкой Android.

Моя проблема в том, что я получаю ClassCastException при изменении макетов XML.

Я предполагаю, что файл R устарел, но странно то, что у меня все еще есть проблема даже после его воссоздания.

Вот соответствующий фрагмент кода и журнал:

Файл журнала:

Вызвано: java.lang.ClassCastException: android.widget.ImageButton E/AndroidRuntime(438): at eu.accleaner.android.WordActivity.onCreate(WordActivity.java:87)

Инкриминированная строка в действии:

mDefinition = (TextView) findViewById(R.id.definition);

Заранее спасибо за вашу помощь.

Ваше здоровье,

Винсент


person tencnivel    schedule 29.12.2010    source источник


Ответы (3)


Судя по тому, как это выглядит, в XML есть ImageButton с идентификатором «определение», и вы пытаетесь привести его к TextView. Измените приведение TextView на ImageButton.

person Kevin Coppock    schedule 29.12.2010
comment
Часто это может быть вызвано тем, что значения идентификатора ресурса в R.java не синхронизированы с другими предварительно скомпилированными классами. Если вы используете Eclipse, сделайте Project | Чистый. Если вы строите из командной строки, используйте ant clean install вместо ant install. - person CommonsWare; 29.12.2010

У меня была аналогичная проблема. R.java генерирует идентификаторы на основе android:id в xml:
public static final int imageButton01=0x7f050001;
public static final int definition=0x7f050002;

Когда я добавлю новую кнопку изображения, R.java обновится до
public static final int imageButton01=0x7f050001;
public static final int imageButton02=0x7f050002;
public static final int definition=0x7f050003;

Из-за проблемы с синхронизацией R.id.definition возвращает старый идентификатор 0x7f050002 в mDefinition = (TextView) findViewById(R.id.definition);, но он соответствует другому элементу (ImageButton02) в соответствии с обновленным R.java.

Итак, у нас есть ClassCastException

person alexey    schedule 11.10.2011

Обходной путь для исправления: назначьте новое значение 'id' в Layout XML и findViewById().

Скорее всего это баг.

person M. Usman Khan    schedule 27.03.2014