meu modo de exibição personalizado é desenhado apenas quando adicionado ao onCreate

Eu criei uma visualização personalizada "GraphBar" que é umaRelativeLayout com umTextView no fundo e umImageView, variando em altura, acima disso. Aqui está o código:

public class GraphBar extends RelativeLayout {

    private int mAvailHeight; // space for the bar (component minus label)
    private float mBarHeight; // 0.0-1.0 value

    public GraphBar(Context context) {
        this(context, null);
    }

    public GraphBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public GraphBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        LayoutInflater.from(context).inflate(R.layout.graphbar, this, true);
        setId(R.id.graphBar); // defined in <merge> but not assigned (?)
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mAvailHeight = getHeight()-findViewById(R.id.label).getHeight();
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);

        View bar2 = findViewById(R.id.smallBar);
        RelativeLayout.LayoutParams llp2 = (RelativeLayout.LayoutParams) bar2.getLayoutParams();
        llp2.height = Math.round((float)mAvailHeight * mBarHeight);
    }

    public void setBarHeight(float value, float max) {
        mBarHeight = value / max;
        findViewById(R.id.smallBar).requestLayout();
    }

    public void setLabel(CharSequence c) {
        ((TextView) findViewById(R.id.label)).setText(c);
    }
}

Ao adicionar essas GraphBars e definir sua altura emonCreate() funciona bem, se eu criá-los onClickSomething ou ligar novamentesetBarHeight() nas barras criadas, a única maneira de ver as alterações é na hierarquia de exibição de carga. Me disseramaqui isso significa que eu preciso ligar para algum lugarrequestLayout(). Onde mais do que depois de modificarmBarHeight? Qualquer ajuda? Eu tentei em todos os lugares, e cominvalidate() também.

Obrigado Andrea

(se necessário, posso postar a atividade com a qual faço meus testes e o graphbar.xml)

Eu descobri que é provavelmenteum inseto. A solução alternativa deve ser novamente chamadarequestLayout(). Ainda não entendo onde posso fazer a ligação.

questionAnswers(1)

yourAnswerToTheQuestion