10
votes

Comment puis-je prolonger Spinner pour mettre en œuvre une nouvelle fonction?

J'essaie d'étendre spinner Classe Android dans mon code pour mettre en œuvre une nouvelle fonction, mais pour une raison quelconque, cela n'a pas fonctionné.

Ceci est la classe prolongée: XXX

Et c'est la façon dont je suis instantanée de cette classe: xxx

Ceci donnez-moi une erreur au moment de l'exécution.

Tout cela est si r.id.sphofentries est déclaré dans ma mise en page en tant que spinner.

mais maintenant, si je déclare sphofentries En tant que Customspinner I Obtenir une erreur d'exécution Juste dans le moment où je définis la mise en page sur l'activité: xxx

aussi je suis sûr que le problème est-ce que je dois déclarer sphofentries en tant que Customspinner car si je le fais: xxx

ceci va sans problème La première ligne mais donne une erreur d'exécution dans le second puis le problème ne crée pas de nouveau Customspinner mais définit le SPHOFENTRIES dans ce Customspinner ( Ceci avec sphofentries déclencher a déclaré comme un Spinner pas un Customspinner ).

Peut-être que je fais quelque chose qui ne va pas dans la mise en page, c'est comme la façon dont je déclare sphofentries en tant que Customspinner : xxx


1 commentaires

Customspinner Spinner = Nouveau Customspinner (this); Spinner = (Customspinner) Findview (R.Id.sphofentries); signifie que vous ne comprenez pas comment fonctionne Android. Avant d'essayer d'écrire vos propres widgets, je recommanderais de lire et de tester les exemples de base.


3 Réponses :


9
votes

C'est une erreur commune. Il suffit d'ajouter ce constructeur, lequel est celui appelé par la mise en page Inflatérielle:

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


1 commentaires

J'ai essayé cela, mais le débogueur n'arrive même pas à entrer cette fonction (pas l'autre). J'ai édité la question au test que j'ai fait.



2
votes

est SPHOFENTRIES A Spinner ou A Customspinner ?

Il faudrait être déclaré comme un Customspinner dans votre présentation pour que vous puissiez la jeter en tant que Customspinner dans votre code.

L'inverse autour durerait. Vous seriez capable de jeter un Customspinner en tant que Spinner , car il s'agit d'une sous-classe.


2 commentaires

J'ai édité la question en considérant votre réponse. Peut-être que je fais quelque chose de mal dans la mise en page?


J'ai fait la même chose auparavant dans mes aménagements et cela fonctionne, la seule différence est que je devais utiliser l'espace de noms entièrement qualifié (ou l'emballage ou quoi que ce soit appelé Java). Essayez d'utiliser le nom complet de votre mise en page et voyez si cela fait une différence. (c'est-à-dire <



13
votes

Enfin, il y avait deux raisons de ne pas fonctionner correctement, les deux réponses précédentes ont raison:

  1. Il est nécessaire de définir également le deuxième constructeur avec le paramètre attributset. XXX

  2. Dans la mise en page Le fileur doit être défini comme un personnalisé et doit être déclaré avec tout le nom complet: XXX


2 commentaires

@fishjd d'accord, a fait le changement.


Y a-t-il un moyen d'éviter d'utiliser un nom pleinement qualifié? déclarer, importer quelque chose, quelque part?