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