Я только что столкнулся с проблемой при попытке получить пользовательское представление с помощью 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>
Я знаю, что иногда проблема заключается в том, что люди случайно называют компонент «Вид» в 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. */
}
Наверное, я просто делаю что-то глупое. У вас есть идеи? Спасибо за вашу помощь!