Вид Android не отображается после метода addView

У меня проблема с методом ViewGroup.addView(). Я использую этот код, чтобы добавить новый вид к моему макету:

TalbeLayout parent = (TableLayout)findViewById(R.id.this_does_not_matter);
parent.removeAllViews(); //this view group contains something at start
TextView tv = new TextView(this);
tv.setText("some text");
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
parent.addView(tv);

И после этого я не могу увидеть мой TextView. Более того, parent.getChildCount() возвращает правильные значения (1, если я пытаюсь добавить одного дочернего элемента). В методе родительского представления onClick() я пытаюсь получить ширину и высоту TextView, и все это равняется 0. Вызов requestLayout(), invalidate() и measure(500, 50) для TableView и parent не имеет никакого эффекта. Я даже пытаюсь добавить новый вид с помощью view.post(Runnable), хотя этот код выполняется в потоке пользовательского интерфейса.

Я был в замешательстве. Я действительно не понимаю, что происходит. Может кто-нибудь объяснить мне, что я делаю не так?

Один интересный момент: setLayoutParams() не имеет никакого эффекта. Если я устанавливаю параметры с шириной =500 и высотой =50, в методе onClick я получаю параметры с шириной =-1 и высотой =-1.

Код после TableRow добавлен:

TableLayout parent = (TalleLayout)findViewById(R.id.this_does_not_matter);
parent.removeAllViews(); //this view group contains something at start
TextView tv = new TextView(this);
tv.setText("some text");
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(500, 50);
TableRow.LayoutParams tlp = new TableRow.LayoutParams(500, 50);
TableRow tr = new TableRow(this);
tr.addView(tv, tlp);
parent.addView(tr, lp);
parent.invalidate();
parent.requestLayout();

Я нашел еще одну интересную вещь. Это действие запускается из TabHost. И "ошибка addView" появляется только в том случае, если активность впервые выбрана в этом TabHost. Если в первый раз я запускаю Activity с другой вкладки, все работает нормально.

1 ответ

Я нашел решение. Если отключить компоновку анимации с помощью android:animateLayoutChanges="false", все работает нормально. Но я до сих пор понятия не имею, почему это происходит. Если кто-нибудь знает причину такого поведения, мне это интересно.

Другие вопросы по тегам