Frage

Ich versuche, einem linearlayout dynamisch Ansichten hinzuzufügen. Ich sehe GetChildCount () durch, dass die Ansichten zum Layout hinzugefügt werden, aber selbst wenn ich ungültig () auf dem Layout anruft, gibt mir die Kinder nicht.

Vermisse ich etwas?

War es hilfreich?

Lösung

Ein paar Dinge, die Sie in Ihrem Code einchecken können:

Dieses selbst enthaltene Beispiel fügt a hinzu Textübersicht Nach einer kurzen Verzögerung, wenn es beginnt:

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ProgrammticView extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final LinearLayout layout = new LinearLayout(this);
        layout.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.FILL_PARENT));

        setContentView(layout);

        // This is just going to programatically add a view after a short delay.
        Timer timing = new Timer();
        timing.schedule(new TimerTask() {

            @Override
            public void run() {
                final TextView child = new TextView(ProgrammticView.this);
                child.setText("Hello World!");
                child.setLayoutParams(new ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.FILL_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT));

                // When adding another view, make sure you do it on the UI
                // thread.
                layout.post(new Runnable() {

                    public void run() {
                        layout.addView(child);
                    }
                });
            }
        }, 5000);
    }
}

Andere Tipps

Ich hatte das gleiche Problem und stellte fest, dass meine Methode über die Overiden onMeasure () nach dem Ungültigen nicht aufgerufen wurde. Also habe ich meine eigene Unterroutine in der Linearlayout erstellt und sie vor der Methode Invalidate () aufgerufen.

Hier ist der Code für einen vertikalen Linearlayout:

private void measure() {
    if (this.getOrientation() == LinearLayout.VERTICAL) {
        int h = 0;
        int w = 0;
        this.measureChildren(0, 0);
        for (int i = 0; i < this.getChildCount(); i++) {
            View v = this.getChildAt(i);
            h += v.getMeasuredHeight();
            w = (w < v.getMeasuredWidth()) ? v.getMeasuredWidth() : w;
        }
        height = (h < height) ? height : h;
        width = (w < width) ? width : w;
    }
    this.setMeasuredDimension(width, height);
}

Ich habe viel Zeit damit verbracht, dieses Problem zu lösen. Und ich fand eine einfache Methode zur Aktualisierung von Linearlayout in 3 Codezeilen

Sie müssen transporperente Farbe in style.xml einstellen

<color name="transparent">#00000000</color>

Und im Code rufen Sie einfach an, um den Hintergrund festzulegen

LinearLayout ll = (LinearLayout) findViewById(R.id.noteList);
ll.setBackgroundColor(getResources().getColor(R.color.transparent));
ll.invalidate();

Wenn Sie einen zeichnbaren Hintergrundanruf haben

ll.setBackgroundResource(R.drawable.your_drawable);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top