addView方法后Android视图未显示

时间:2014-04-14 15:20:04

标签: android ui-thread

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.为TableView调用requestLayout(),invalidate()和measure(500,50)并且没有效果。我甚至尝试在view.post(Runnable)的帮助下添加新视图,尽管此代码在UI线程中执行。

我很困惑。我真的不明白会发生什么。有人能解释我的错误吗?

一个有趣的时刻: 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运行。只有在此TabHost中首次选择“活动”时,才会显示“addView bug”。如果我第一次从另一个标签启动Activity,一切正常。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。如果使用android关闭布局动画:animateLayoutChanges =" false"一切正常。但我仍然不知道为什么会这样。如果有人知道这种行为的原因,那对我来说很有意思。