Расширить стандартный класс

Интерфейс, диалоги, темы, стили, меню
Ответить
Miroslav
Сообщения: 9
Зарегистрирован: 10 мар 2013, 17:40

Расширить стандартный класс

Сообщение Miroslav » 05 апр 2013, 09:09

Здравствуйте!

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

Код: Выделить всё

package com.example;

import android.content.Context;
import android.widget.ToggleButton;

public class A extends ToggleButton {

    public A(Context context) {  //конструктор суперкласса
        super(context);
    }

    private void addedMethod() {
        //...
    }

}
И в onCreate() Activity:

Код: Выделить всё

A a = (A) findViewById(R.id.toggleButton1);
или так:

Код: Выделить всё

A a = new A(this);
a = (A) findViewById(R.id.toggleButton1);
В любом случае вылезает ошибка преобразования типа:
E/AndroidRuntime(2472): Caused by: java.lang.ClassCastException: android.widget.ToggleButton

Почему-то наследник не приводится к типу родителя. Может, кто знает, в чем здесь дело...?

Спасибо за внимание. =)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Расширить стандартный класс

Сообщение KamiSempai » 05 апр 2013, 11:33

Если у Вас в xml разметке указан ToggleButton, то Вы пытаетесь привести родителя к наследнику. А этого делать нельзя.
Решение: Указать в разметке вместо "ToggleButton" что-то вроде "com.example.A".

PS: Во втором примере "A a = new A(this);" совершенно лишне. Объект создается, а потом перетирается ссылкой на другой объект.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Miroslav
Сообщения: 9
Зарегистрирован: 10 мар 2013, 17:40

Re: Расширить стандартный класс

Сообщение Miroslav » 05 апр 2013, 13:14

Спасибо Вам большое!

Совсем забыл про xml-разметку.
Плюс, может кому пригодится, необходимо включить в класс-наследник используемый вариант конструктора суперкласса, у меня это был

Код: Выделить всё

public A(Context context, AttributeSet attrs) {
    super(context, attrs);
}

behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Re: Расширить стандартный класс

Сообщение behzodbek » 06 май 2013, 20:44

Miroslav писал(а):Спасибо Вам большое!

Совсем забыл про xml-разметку.
Плюс, может кому пригодится, необходимо включить в класс-наследник используемый вариант конструктора суперкласса, у меня это был

Код: Выделить всё

public A(Context context, AttributeSet attrs) {
    super(context, attrs);
}
Я из за этого конструктора почти 3 дня мучился. Как всегда РЕСПЕКТ Славику(rezak90). Он помоог найти :)
Изображение

Ответить