1

У меня есть проект, в котором я пытаюсь сделать подкласс ImageView, чтобы добавить некоторые методы, которые я хочу использовать. Я всего лишь пару недель в Android-кодировании, поэтому я не очень опытен и довольно новичок в ООП. Поскольку я не мог заставить его работать в моем основном проекте, я сделал небольшой тестовый проект, увы, у меня такая же ошибка.Ссылка на подкласс ImageView, получающий ClassCastException

Сначала я создал новый класс, который расширяет ImageViewCustom.java ImageView

public class ImageViewCustom extends ImageView {} 

(я добавил конструкторов из суперкласса)

в XML Я сделал вот так, после прочтения here

<ImageView class="com.example.testcustomclass.ImageViewCustom" 
    android:id="@+id/imageViewCustom" ... /> 

Это работает, чтобы строить и запускать, но затем, когда я пытаюсь ссылаться на него в MainActivity, так вот

ImageViewCustom imageViewTest = (ImageViewCustom) 
    findViewById(R.id.imageViewCustom); 

я ...

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity 
    ComponentInfo{com.example.testcustomclass.MainActivity}: 
    java.lang.ClassCastException: android.widget.ImageView 
    cannot be cast to com.example.testcustomclass.ImageViewCustom 

Что я делаю неправильно? D: Я предполагаю, что у меня отсутствует что-то очень простое, так как это почти пустой проект. FYI Я пытаюсь получить задание, сделанное сегодня вечером (ах!), И получил так много дублирующего кода, что хотел сделать подкласс, но я был в тупике и стрессовом состоянии> < недостаток сна и т. Д.

(изменить , фиксируя форматирование кода ...)

ответ

3

Ну ваш XML выключен ... Я всегда использую

<com.my.project.MyView 
    android:id="..." 
/> 

, который я считаю, это правильный способ сделать это.

+0

Это работает, по-видимому, я сделал проблему Решая неправильный путь в той ссылке, которую я предоставил, ха-ха. Поговорите о путанице, спасибо! XD – BOLL

0

Если ваш вашу точку зрения в макете XML вам не нужно использовать класс

заменить

<ImageView class="com.example.testcustomclass.ImageViewCustom" 
    android:id="@+id/imageViewCustom" ... /> 

с

<com.example.testcustomclass.ImageViewCustom 
    android:id="@+id/imageViewCustom" ... />