CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 10 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 7 su 7
Discussione:

errore con extends

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Oct 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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

  2.  
  3. #2
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    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...

  4. #3
    Baby Droid


    Registrato dal
    Oct 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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

  5. #4
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    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.

  6. #5
    Baby Droid


    Registrato dal
    Oct 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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

  7. #6
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    Quote Originariamente inviato da 2000tidus2000 Visualizza il messaggio
    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).

  8. #7
    Baby Droid


    Registrato dal
    Oct 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Risolto, andavano inizializzati tutti e 3 i costruttori, contex, contex+attr, contex+attr+defstyle.

    Grazie ^^

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy