覆盖超类继承的方法

时间:2014-07-09 23:14:27

标签: java android listview inheritance polymorphism

我正在扩展ListView类,以便我可以在下拉项中使一些文本变为粗体。我试图覆盖addView方法,以便我可以在添加视图之前更改文本。我收到一个错误说"方法不会覆盖它的超类方法。" addView继承自ViewGroup类。

public class EditableListView extends ListView {

    public EditableListView(Context context){
        super(context);
    }
    public EditableListView(Context context, AttributeSet attrs){
        super(context, attrs);
    }
    public EditableListView(Context context, AttributeSet attrs, int defStyle){
        super(context, attrs, defStyle);
    }


    @Override
    public void addView(View child, int index, LayoutParams params) {
        final SpannableStringBuilder builder = new SpannableStringBuilder(((CheckedTextView)child).getText().toString());
        final StyleSpan bold = new StyleSpan(android.graphics.Typeface.BOLD);
        builder.setSpan(bold, 10, 21, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        builder.setSpan(bold, 36, 37, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        ((CheckedTextView)child).setText(builder);
        super.addView(child, index, params);

    }
}

2 个答案:

答案 0 :(得分:1)

在android api中,它表示该方法不受支持,并在调用时抛出异常。

http://developer.android.com/reference/android/widget/ListView.html

我不熟悉使用listviews,所以我可能在这里遇到了问题。我看到ViewGroup的addView方法是有用的,但是由于ListView是一个孩子,因为addView引发了异常,所以我认为正在发生的事情是它直接覆盖了父方法。在它上面,在这种情况下是AbsListView,并且看到该方法不受支持并因此抛出异常。

要解释为何发生这种情况:Why is super.super.method(); not allowed in Java?

答案 1 :(得分:0)

如果您有自定义列表视图的类,则只需添加您在处理自定义列表视图的类中提供的方法, OR 在类中添加所提供方法的内容你已经覆盖了'addView'方法。