2014-11-25 14 views
6

Ho un problema con l'utilizzo di una classe che estende android.view.View, che è strano perché sto facendo la stessa cosa in due progetti diversi, e solo in uno di questi è questo un problema.android - nessun costruttore predefinito in vista

Entrambi i progetti hanno una classe che dice: public class ClassName extends View.

Ma per uno di loro, questa linea è sottolineata rossa, e il messaggio dato è

"Non v'è alcun costruttore di default disponibili in 'android.view.View'"

I non so perché uno ha questo problema mentre l'altro no. Non sono le stesse classi, naturalmente, ma entrambe estendono la vista allo stesso modo. Ho pensato che sarebbe stato un problema comune, ma non sto trovando nulla a riguardo tramite la ricerca su Google, quindi ti sto chiedendo qui. Grazie per l'aiuto che puoi dare!

EDIT:

I commenti mi ha fatto prova di nuovo, e abbastanza sicuro, la classe con l'errore non avere un costruttore definito nella sua classe. Trovo interessante il fatto che, anche se sono andato e definito un costruttore, ha comunque dato lo stesso errore fino a quando ho aggiunto i parametri (contesto Context, AttributeSet attrs) e nel costruttore ho aggiunto una riga 'super (context, attrs)'. Li ho aggiunti perché erano presenti nel costruttore della classe lavoratrice. Quindi la versione operativa è

public DrawingActivity(Context context, AttributeSet attrs) { 
    super(context,attrs); 
} 

La mia nuova domanda riguarda esattamente cosa fa. Questo è stato preso dalla classe che non ha avuto l'errore, e quella versione è stata originariamente copiata da un tutorial e non ci ha mai pensato molto al momento.

+0

Guardare in altra classe. Troverete uno o più costruttori. –

+0

hai un costruttore vuoto (un costruttore senza parametri) nella tua vista? – Blackbelt

+1

pubblica la tua classe 'ClassName'. –

risposta

6

Elimina costrutto senza parametri.

La vista deve avere solo 3 costruttori:

public DrawingActivity(Context context, AttributeSet attrs) { 
    super(context, attrs); 

} 

public DrawingActivity(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 

} 
public DrawingActivity(Context context) { 
    super(context); 
} 

A proposito di questo costruttori si può leggere here. Posso citare solo su defStyle:

Lo stile predefinito da applicare a questa vista. Se 0, non verrà applicato lo stile (oltre a ciò che è incluso nel tema). Questa può essere una risorsa di attributo, il cui valore verrà recuperato dal tema corrente o una risorsa di stile esplicita.

0

Non credo che questo è il suo problema ... Questo non funziona:

`public MyPanel(Context _context) { 
    context = _context; 
    super(context);` 

Questo funziona:

`public MyPanel(Context _context) { 
    super(_context); 
    context = _context;` 

sto cercando di indovinare che questo era il suo problema o almeno era il mio problema. Hai lo stesso errore che descrive.

0

Si dovrebbe avere due costruttori nella tua classe:

public class ABC extends View{ 

public ABC(Context context) { 
    super(context); 
} 

public ABC(Context context, @Nullable AttributeSet attrs) { 
    super(context, attrs); 

}} 
Problemi correlati