Erreur de gonfler lors de l'extension d'une classe
Je suis en train de créer une vue personnalisée GhostSurfaceCameraView
qui s'étend SurfaceView
. Voici mon fichier de définition de classe
GhostSurfaceCameraView.java
:
public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
GhostSurfaceCameraView(Context context) {
super(context);
//Install a SurfaceHolder.Callback so we get notified when the
//underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
//The Surface has been created, acquire the camera and tell it where to draw.
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
//TODO: add more exception handling logic here
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
//Surface will be destroyed when we return, so stop the preview.
//Because the CameraDevice object is not a shared resource, it's very
//important to release it when the activity is paused.
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
//Now that the size is known, set up the camera parameters and begin
//the preview.
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
parameters.set("orientation", "portrait");
//parameters.setRotation(90); //API 5+
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}
Et c'est dans ma ghostviewscreen.xml:
<com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
Maintenant dans l'activité que j'ai fait:
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.ghostviewscreen);
}
}
Quand setContentView()
est appelée, une exception est levée:
Binary XML file 09-17 22:47:01.958: ERROR/ERROR(337):
ERROR IN CODE:
android.view.InflateException: Binary
XML file line #14: Error inflating
class
com.alpenglow.androcap.GhostSurfaceCameraView
Quelqu'un peut me dire pourquoi j'ai cette erreur? Merci.
Vous devez vous connecter pour publier un commentaire.
Je pense que j'ai compris pourquoi ce n'était pas de travail. J'étais seul avec un constructeur pour le cas d'un paramètre "contexte" quand je si ont fourni un constructeur pour les deux paramètre 'Context, AttributeSet' cas. J'ai aussi besoin de donner le constructeur(s) d'accès public. Voici mon fix:
View is not using the 2- **OR** 3-argument View constructors
est une sorte de publicité mensongère.@Tim - à la Fois les constructeurs ne sont pas nécessaire, que le
ViewClassName(Context context, AttributeSet attrs )
constructeur est nécessaire. J'ai trouvé cela la voie douloureuse, après des heures et des heures de temps perdu.Je suis très nouveau à développement Android, mais je fais un sauvage suppose ici, qu'il peut-être dû au fait que depuis que nous sommes en ajoutant la coutume
View
classe dans le fichier XML, nous en sommes plusieurs attributs dans le fichier XML, qui doivent être traitées au moment de l'instanciation. Quelqu'un de beaucoup plus compétent que moi, il sera en mesure de faire la plus claire la lumière sur cette affaire si.Une autre cause possible de l'Erreur "gonfler" classe de message pourrait être la faute d'orthographe du nom complet du paquet où il est spécifié dans le fichier XML:
L'ouverture de votre mise en page fichier XML dans l'Eclipse de l'éditeur XML doit mettre en évidence ce problème.
Il est important d'écrire plein de chemin de classe dans le fichier xml.
J'ai eu " Erreur de gonflage de la classe lors de la seule sous-classe est le nom était écrit dans l'.
J'ai eu cette erreur qui me depuis quelques heures. S'avère, j'avais ajouté à la vue personnalisée lib comme un module dans Android Studio, mais j'avais négligé de l'ajouter en tant que dépendance en application de l'
build.gradle
.fwiw, j'ai reçu cette erreur en raison de certaines personnalisée d'initialisation dans le constructeur de la tentative d'accès à un objet null.
J'ai eu le même problème de l'extension d'une TextEdit. Pour moi, l'erreur a été, je n'ai non ajouter "public" du constructeur. Dans mon cas ça fonctionne, même si je ne définir qu'un seul constructeur, l'un avec des arguments
Context
etAttributeSet
. Le filaire, c'est que le bug ne se révèle que lorsque je construire un APK (signé ou non) et je les transférer aux périphériques. Lorsque l'application est exécutée via AndroidStudio -> Exécuterapplication sur un port USB de l'appareil l'application fonctionne.dans mon cas, j'ai ajouté ces cyclique des ressources:
alors changé
et il a travaillé
Dans mon cas, j'ai copié ma classe de quelque chose et n'ai pas remarqué tout de suite que c'était un
abstract
classe. Vous ne pouvez pas gonfler les classes abstraites.La chose à comprendre ici est que:
Le constructeur
ViewClassName(Context context, AttributeSet attrs )
est appelé lors du gonflage du customView via xml.Vous le voyez, vous n'êtes pas en utilisant le mot clé new pour instancier l'objet de votre ex. vous ne faites pas
new GhostSurfaceCameraView()
. Ce faisant vous sont d'appeler le premier constructeur à savoirpublic View (Context context)
.Alors que lors du gonflage de la vue à partir de XML, c'est à dire lors de l'utilisation de
setContentView(R.layout.ghostviewscreen);
ou à l'aide defindViewById
, vous, non, pas vous!, le système android appelle laViewClassName(Context context, AttributeSet attrs )
constructeur.C'est clair lors de la lecture de la documentation : "Constructeur qui est appelée lors du gonflage d'une vue à partir de XML." Voir: https://developer.android.com/reference/android/view/View.html#View(android.content.Context,%20android.util.AttributeSet)
Donc, ne jamais oublier de base du polymorphisme et de ne jamais oublier la lecture par le biais de la documentation. Il permet d'économiser une tonne de maux de tête.