Visualizzazione stampabile
-
errore con extends
Buongiorno ragazzi,
non riesco a risolvere questo errore, ho creato una classe utility figlia di Textview
codice:
public class utility extends TextView {
public utility(Context context) {
super(context);
}
quando la vado a richiamare il programma crasha, cosa c'è di errato in questa operazione:
codice:
utility tex;
tex = (utility) findViewById(R.id.res);
sembra che ci sia un problema col cast, in quanto con TextView funziona, se provo a fare
codice:
utility tex = new utility(this);
crasha ugualmente! Dove sbaglio?
questo è l'errore che mi da il debugger
codice:
06-04 12:21:14.010 31463-31463/com.example.just E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.just/com.example.just.MainActivity}: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.example.just.utility
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2185)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210)
at android.app.ActivityThread.access$600(ActivityThread.java:142)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4928)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.example.just.utility
at com.example.just.MainActivity.onCreate(MainActivity.java:26)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2139)
... 11 more
-
Ma nel layout hai inserito una TextView o una utility?
Cmq sia nella documentazione ufficiale c'è una intera guida su come creare delle View personalizzate. Tra l'altro devi creare un <declare-stylable>, usare la View personalizzata nel layout, fare override di una serie di metodi, ecc.
Non è così semplice...
Descrivi quali passi hai seguito...
-
nel layout è un'utility. A me serviva soltanto aggiungere un paio di metodi a TextView, graficamente non dovevo modificare nulla, utility è così:
codice:
public class utility extends TextView {
public utility(Context context) {
super(context);
}
public void stamp(String what)
{
setText(getText().toString() + what);
}
public void stamp(int what)
{
String tostamp = Integer.toString(what);
stamp(tostamp);
}
public static void clean(TextView where)
{
setText("");
}
}
ma giù quando provo a istanziare l'oggetto con utility asd = new utility(this); crasha
-
Da questo messaggio di errore:
java.lang.ClassCastException: android.widget.TextView cannot be cast to com.example.just.utility
mi viene da pensare che nel tuo layout hai usato una TextView, e non una "utility".
Inoltre la documentazione ufficiale dice che per creare una View personalizzata serve come minimo un costruttore che accetti un Context e un AttributeSet, mentre nella tua classe vedo solo un Context.
Last but not least non credo che estendere TextView sia in questo caso la soluzione migliore per lo scopo che vuoi raggiungere.
-
textview(che è un estensione di view) ha tre costruttori, uno con solo il contex, e gli altri con l'attributo. Nella xml ho messo l'utility, che ereditando l'intera classe TextView, dovrebbe essere identica :S
-
Quote:
Originariamente inviato da
2000tidus2000
textview(che è un estensione di view) ha tre costruttori, uno con solo il contex, e gli altri con l'attributo. Nella xml ho messo l'utility, che ereditando l'intera classe TextView, dovrebbe essere identica :S
Secondo me devi inserire anche gli altri costruttori e all'interno di questi richiamare quelli della superclasse con super(parametri).
-
Risolto, andavano inizializzati tutti e 3 i costruttori, contex, contex+attr, contex+attr+defstyle.
Grazie ^^