Android: невозможно выполнить приведение из вида в кнопку - PullRequest
2 голосов
/ 10 мая 2010

Я только начал работать с Android, но, похоже, столкнулся с проблемой, на которую просто не могу найти ответ. Я получаю сообщение об ошибке «Невозможно привести от View к кнопке» в этой строке:

Button myButton = (Button)findViewById(R.id.my_button);

Я пробовал много разных вещей, чтобы начать, и я искал ответ, но по какой-то причине он просто отказывается работать правильно. Если бы кто-нибудь мог указать мне правильное направление, это было бы очень ценно.

Спасибо заранее.

Ответы [ 8 ]

6 голосов
/ 02 октября 2011

попробуйте это,

android.widget.Button myButton = (android.widget.Button)findViewById(R.id.my_button); 
5 голосов
/ 11 мая 2010

Является ли исключение ClassCastException? Если это так, то вид, который вы находите с идентификатором my_button, не является кнопкой. Если это NullPointerException, то нет представления с идентификатором my_button. Это может быть вызвано не вызовом setContent () перед попыткой найти представления.

3 голосов
/ 10 октября 2012

Я тоже столкнулся с этой ошибкой и не смог найти причину, по которой она произошла. Как Джо Планте указывает, что если это не работает, значит, что-то не так ...

В моем сценарии я случайно присвоил идентификатору относительной компоновки (то есть щелчок пустого места в графическом макете) тот же идентификатор, что и моей кнопке. Это приводило к тому, что FindViewById (R.id.my_button) возвращал неправильный вид;

Чтобы проверить это в своем xml, посмотрите,

<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/btnRecipe"
1 голос
/ 19 сентября 2012

Я действительно столкнулся с этим в коде, который я делал. По сути, это было «Если это похоже на утку и если это звучит как утка, то почему кровавый вставьте здесь ругательство вы не видите это как утку?» ситуация. Я изменил эквивалент android: id = "@ + id / someid", изменив его на эквивалент android: id = "@ + id / someid_x" (не забудьте также сделать это в Java), и все работало как Заводной опять.

Итак, в моей ситуации я считаю, что там мог быть идентификатор, ссылающийся на другой объект в таблице R, и он получал неправильный или непреднамеренный элемент. Самое странное, что это начало происходить, когда поместить набор представлений в RelativeLayout

1 голос
/ 23 августа 2012

В дополнение к ко всему прочему уже упоминалось, я бы также посоветовал вам взглянуть на ваши операторы импорта в верхней части документа. Я нахожу это особенно неприятным:

import android.R;

Это означает, что каждый раз, когда вы ссылаетесь на R.id.my_button в остальной части вашей программы, он просматривает ресурсы Android по умолчанию вместо ваших собственных.

1 голос
/ 11 апреля 2011

Я предполагаю, что ваше представление XML (my_button) не является кнопкой. В противном случае, вы уверены, что идентификатор вашей кнопки правильный? Он должен читаться как "android:id="@+id/my_button"", а также иметь ширину и высоту. Пожалуйста, опубликуйте свой XML-файл.

0 голосов
/ 09 декабря 2015

Проверьте, не пропустили ли вы эту строку

import android.view.View;

0 голосов
/ 02 декабря 2013

это исключение приведения класса произошло при вызове несоответствия типов виджета, как если бы у вас было одно изображение View image1, но вы вызываете это в Java-коде ImageButton ib = (ImageButto) findViewById (R.id.image1); тогда вы получите сообщение об ошибке, подобное этому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...