2010-12-20 4 views
2

J'ai une vue personnalisée (qui étend GLSurfaceView) que j'essaie d'utiliser dans mon application. La mise en page xml qui l'utilise semble être chargée correctement (les attributs que j'ai définis pour la vue sont appliqués), mais ni le constructeur de la vue ni la méthode onFinishInflate ne sont appelés pour la classe. Je devrais également ajouter que je suis nouveau sur la plate-forme android donc c'est probablement une erreur stupide.Ni constructeur, ni onFinishInflate appelé pour l'affichage personnalisé

Voici mon main.xml

<?xml version="1.0" encoding="utf-8"?> 

#<!-- Status Bar --> 
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0" 
    android:background="@drawable/status_bkg"> 

    #<!-- Location label --> 
    <TextView 
     android:text="Location" 
     android:textColor="#FFFFFF" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    #<!-- Date/Time label --> 
    <TextView 
     android:text="Date and Time" 
     android:textColor="#FFFFFF" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="right" /> 
</LinearLayout> 

#<!-- ChartView --> 
<View class="com.xxx.yyy.ChartView" android:id="@+id/chartView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00FF00" 
    android:layout_weight="1"> 
</View> 

Le ChartView est le GLSurfaceView personnalisé. Cette mise en page est chargée et ChartView a un arrière-plan vert comme spécifié. Cependant, aucune de mes installations (en code) ne se passe pour cela. J'ai essayé de le placer dans les deux constructeurs et dans les méthodes onFinishInflate, mais ils ne sont pas appelés de façon inexplicable. Je l'ai vérifié que le nom de classe est correcte (la xxx.yyy sont juste pour cacher la société dans ce poste.

J'ai aussi essayé une forme différente de la référence xml

<com.xxx.yyy.ChartView android:id="@+id/chartView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00FF00" 
    android:layout_weight="1"/> 

Mais cette meurt lors du chargement de l'activité dit que le constructeur

ChartView (contexte de contexte, attrs AttributeSet)

n'existe pas (bien qu'il soit certainement dans mon code).

Quelqu'un at-il des conseils sur ce qui pourrait se passer?

+0

Collez le code Java de la vue. – Cristian

Répondre

0

J'ai finalement compris cela. J'avais défini mon constructeur (l'on ne se dit) comme:

public ChartView(MyActivity context, AttributeSet attrs) 
{ 
    super(context, attrs); 
….   
} 

Cependant, il a commencé à travailler quand j'ai changé le constructeur d'être:

public ChartView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
….   
} 

Étant donné que MyActivity étend l'activité (qui étend Contexte), c'est un code parfaitement valide et je crois qu'il devrait fonctionner (il compile certainement). Il semblerait qu'il y ait une erreur dans la réflexion que le système utilise pour localiser cette méthode.

Questions connexes