Android ClassCastException upon retrieving Custom View

Я только что столкнулся с проблемой при попытке захвата пользовательского представления с помощью findViewById(). В остальном пользовательское представление отображается и работает правильно. К сожалению, мне нужно иметь возможность изменять некоторые данные, которые оно отображает по своему усмотрению, так что это необходимо сделать.

Мой XML выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <com.TheProject.TheApp.Chart 
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  />

</LinearLayout>

Я знаю, что иногда проблема заключается в том, что люди случайно называют компонент "View" в XML вместо его подкласса.

Внутри метода onCreate() моей Activity у меня есть вот это:

myChart=(Chart)findViewById(R.id.chart); //where myChart is an object of type Chart

Это бросает ClassCastException.

Я решил немного поэкспериментировать и вместо этого изменил строку на эту, чтобы посмотреть, получу ли я ClassCastException:

View chart=(View)findViewById(R.id.chart);

Это сработало нормально, что говорит мне, что findViewById без проблем выдает мне View. Но он не хочет давать мне диаграмму.

Что касается класса Chart, то это действительно простой подкласс View, который в остальном работает правильно.

public class Chart extends View{
    public Chart(Context context) {
    super(context);     
    init();
}

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

public Chart(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);        
    init();     
}
    /* More stuff below like onDraw, onMeasure, setData, etc. */
}

Возможно, я просто делаю что-то глупое. Есть ли у вас какие-нибудь идеи? Спасибо за помощь!

5
задан Schmidget 19 October 2011 в 11:32
поделиться