2010-12-20 9 views
2

Ich habe eine benutzerdefinierte Ansicht (die GLSurfaceView erweitert) Ich versuche, in meiner App zu verwenden. Das XML-Layout, das es verwendet, scheint korrekt geladen zu werden (Attribute, die ich für die Ansicht festgelegt habe, werden angewendet), aber weder der Konstruktor der Ansicht noch die onFinishInflate-Methode werden für die Klasse aufgerufen. Ich sollte auch hinzufügen, dass ich neu auf der Android-Plattform bin, so ist dies wahrscheinlich ein dummer Fehler.Weder Konstruktor noch onFinishInflate für benutzerdefinierte Ansicht aufgerufen

Hier ist meine 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> 

Die Chartview ist der Brauch GLSurfaceView. Dieses Layout ist geladen und die ChartView ist wie angegeben grün hinterlegt. Jedoch geschieht nichts von meinem Setup (im Code) dafür. Ich habe versucht, es in den beiden Konstruktoren und in den onFinishInflate-Methoden zu platzieren, aber sie werden unerklärlicherweise nicht aufgerufen. Ich habe überprüft, dass der Klassenname korrekt ist (die xxx.yyy sind nur die Unternehmen in diesem Beitrag nicht zu verstecken.

Ich habe auch eine andere Form der XML-Referenz versuche

<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"/> 

Aber diese stirbt, wenn sagt der Aktivität Laden, dass der Konstruktor

Chartview (Context Kontext AttributeSet attrs)

existiert nicht (obwohl es sicherlich in meinem Code ist).

Wer hat irgendwelche Tipps bekommen, was passieren könnte?

+0

Fügen Sie den Java-Code der Ansicht ein. – Cristian

Antwort

0

Ich endlich herausgefunden.

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

aber es begann zu arbeiten, wenn ich den Konstruktor geändert zu sein: Ich hatte meinen Konstruktor (die nicht immer genannt) definiert

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

Da MyActivity Aktivität erstreckt (die Context erstreckt), das ist ein absolut gültiger Code und ich glaube, dass es funktionieren sollte (es kompiliert). Es scheint, dass die Reflexion, die das System beim Auffinden dieser Methode verwendet, fehlerhaft ist.

Verwandte Themen