Страница 1 из 1

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

Добавлено: 05 апр 2013, 09:09
Miroslav
Здравствуйте!

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

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

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

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

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

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

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

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

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

Добавлено: 05 апр 2013, 13:14
Miroslav
Спасибо Вам большое!

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

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

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

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

Добавлено: 06 май 2013, 20:44
behzodbek
Miroslav писал(а):Спасибо Вам большое!

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

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

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