Ho appena incontrato un problema durante il tentativo di catturare una vista personalizzata utilizzando findViewById(). La visualizzazione personalizzata viene visualizzata e funziona correttamente. Sfortunatamente, devo essere in grado di modificare alcuni dati visualizzati a piacere, quindi è necessario farlo.Android ClassCastException dopo il recupero della vista personalizzata
mio XML è simile al seguente:
<?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>
so che a volte il problema è che le persone chiamano per sbaglio la componente "Visualizza" nella XML invece della loro sottoclasse di esso.
All'interno metodo onCreate() della mia attività, ho questo:
myChart=(Chart)findViewById(R.id.chart); //where myChart is an object of type Chart
che getta una ClassCastException.
ho deciso di sperimentare un po 'e invece ha cambiato la linea a questo per vedere se ho ancora ricevuto una ClassCastException:
View chart=(View)findViewById(R.id.chart);
Questo funzionava bene, che mi dice che findViewById non ha problemi a darmi una visualizzazione. Ma non vuole darmi un grafico.
Per quanto riguarda la classe Chart, è una sottoclasse di View molto semplice che sembra funzionare correttamente.
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. */
}
Probabilmente sto facendo qualcosa di stupido. Ragazzi avete qualche idea? Grazie per l'aiuto!
Il grafico ha costruttori? – Phil
Sì. Il grafico ha tutti e 3 i costruttori. Ho modificato il mio post per mostrarlo. – Schmidget