ViewGroup addView(); Komponenten werden nicht hinzugefügt

  • 3 Antworten
  • Letztes Antwortdatum
M

MandraKobold

Ambitioniertes Mitglied
3
Hallo ihr Lieben,

ich stehe ziemlich auf dem Schlauch und komm nicht weiter. Vermutlich ist das Problem nicht so dolle, aber... ich finde den fehler einfach nicht.

Grob: die Childs einer CustomViewGroup werden nach dem Hinzufügen der CustomViewGroup zu einer ViewGroup nicht angezeigt.

Fein:
Ich habe innerhalb einer layout xml Datei, ein Layout definiert, welches aus einem LinerarLayout besteht, das eine Textview und ein EditText enthält. Dieses Layout wird als (Custom-)ViewGroup gehändelt und wird im späterem Verlauf einer ViewGroup über den Code hinzugefügt.

Im Konstruktor für die CustomViewGroup werde die Komponenten initzialisiert:
Code:
 View.inflate(context, R.layout.edittextfield, this);  
            
textview = (TextView)  getChildAt(0).findViewById(R.id.etf_textview);
editTextfield = (EditText) getChildAt(0).findViewById(R.id.etf_edittext);
nach der Initialisiierung und dem hinzufügen meiner CustomViewGroup zu einer ParentViewGroup, werden die Textview bzw. das Editfield nicht angezeigt. ...

Code hinzufügen der CustomViewGroup:


Code:
CustomViewGroup  vgTextfield = new CustomViewGroup(context);  // CustomViewGroup

....

// do some stuff with the view components

...

addView(vgTextfield);  // add zu ViewGroup
Meine Frage ist nun, warum werden keine Fehler im LogCat angezeigt aber die Komponenten nicht angezeigt???
Müssen onLayout oder onMeasure überschrieben werden und wie??

Vielen Dank für jede Hilfe.
 
Weiss keiner einen Rat oder kann mir zumindest einen Hinweis geben?
Wäre wirklich sehr hilfreich....

Zwischenzeitlich versuchte ich die Childs nicht aus der XML-Datei zu entnehmen und habe sie neu erstellt. Aber immer das gleiche Ergebnis:
Die Childs werde nicht angezeigt. Überschreibe ich onlayout, wird das LinearLayout gar nicht oder nur halb angezeigt....
 
Hi.

Damit die Views vernünftig aktualisiert werden musst du das der ViewGroup mitteilen (ViewGroup.invalidate(), oder postInvalidate())
 
  • Danke
Reaktionen: MandraKobold
Danke für deine Antwort.
Das Problem lag wie vermutet bei den onLayout und onMeasure Methoden.

Nach dem die richtigen Values in den beiden Methoden standen, war es egal ob die Childs aus der XML-Datei oder neu erstellt werden.
War zwar ein bisschen tricky aber das nächste mal werden solche Probleme nicht so viel Zeit in anspruch nehmen.

Hier der Code für den nächsten der ein solches Problem haben sollte :

# Initialisierung wie im ersten post

Code:
@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        final int count = getChildCount();
        for (int i = 0; i < count; i++) {
            View view = getChildAt(i);
            view.measure(widthMeasureSpec, heightMeasureSpec);
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

@Override
    protected void onLayout(boolean changed, int left, int top, int right,
            int bottom) {
        for (int i = 0; i < getChildCount(); i++) {
            View v = getChildAt(i);

            float fl = 0;
            float ft = 0;
            float fr = fl + width;
            float fb = ft + height;
            v.layout(Math.round(fl), Math.round(ft), Math.round(fr),
                    Math.round(fb));
        }
    }
 
Zurück
Oben Unten