Po prostu napotkano problem przy próbie pobrania niestandardowego widoku za pomocą findViewById(). Widok niestandardowy wyświetla się i działa poprawnie. Niestety, muszę mieć możliwość zmiany niektórych danych wyświetlanych do woli, więc trzeba to zrobić.Wyjątek ClassCastException systemu Android po pobraniu niestandardowego widoku
Moje XML wygląda następująco:
<?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>
wiem czasami problem jest to, że ludzie przypadkowo nazwa komponentu „Widok” w XML zamiast ich podklasy niego.
Wewnątrz metody Moja aktywność w onCreate(), mam to:
myChart=(Chart)findViewById(R.id.chart); //where myChart is an object of type Chart
To rzuca ClassCastException.
postanowiłem poeksperymentować trochę i zamiast zmienił linię do tego, aby sprawdzić, czy nadal otrzymaliśmy ClassCastException:
View chart=(View)findViewById(R.id.chart);
To działało w porządku, który mówi mi, że findViewById ma dziś daje mi View. Ale nie chce mi dać wykresu.
Jeśli chodzi o klasę wykresów, to jest to naprawdę prosta podklasa widoku, która wydaje się działać poprawnie.
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. */
}
Prawdopodobnie robię coś głupiego. Czy macie jakieś pomysły? Dzięki za pomoc!
Czy wykres zawiera konstruktory? – Phil
Tak. Wykres ma wszystkie 3 konstruktory. Zmodyfikowałem mój post, aby je pokazać. – Schmidget