在for循环中动态添加视图会导致偶然定位 - Android

Ash*_*win 8 android

我在for循环中动态地将视图添加到相对布局(比如说容器).我注意到有些奇怪的事情.
当在for循环中的相对布局中添加一个在另一个下面的行时,我看到第一次有几个视图重叠.但是当我锁定并解锁屏幕时,我可以看到视图正确放置.

将动态视图添加到相对布局时,我应该注意一些事情吗?

编辑
我找到了解决方法如何摆脱这个(请检查我的答案).但我很乐意接受一个分析这个问题的答案并告诉我为什么会这样.

我已经简化为代码,评论应该对我正在做的事情有个好主意.

int prev_id=ID_OF_THE_ELEMENT_ABOVE;

/*Empty RelativeView with width and height as MATCH_PARENT and WRAP_CONTENT respectively*/
RelativeLayout container=(RelativeLayout) findViewById(R.id.container);
while(ThereIsData){
                      /*GET THE DATA HERE THAT HAS TO BE ASSIGNED TO EACH TEXTVIEW*/
            ...


                        /* ADD TEXTVIEW #1 below prev_id/
            ...
            ...

                        /*ADD TEXTVIEW #2 (WITH BASELINE OF TEXTVIEW#
            ...
            ...

                        /*TEXTVIEW #3 (BELOW TEXTVIEW#1)*/
            ...
            ...                               

                        /*TEXTVIEW #4 (BELOW TEXTVIEW#2)*/
                        ...
            ...

                        /*ASSIGN THE ID OF TEXTVIEW#3 TO prev_id SO THAT 
                  IN THE NEXT ITERATION TEXTVIEW#1 CAN USE prev_id
                         */
                        prev_id=ID(TEXTVIEW#2);

            /*ADD TEXTVIEWS CREATED IN THIS ITERATION*/
             container.addView(TEXTVIEW#1);
                         container.addView(TEXTVIEW#2);
                         container.addView(TEXTVIEW#3);
                         container.addView(TEXTVIEW#4);                     
  }
Run Code Online (Sandbox Code Playgroud)

Ank*_*sal 5

这是因为您有一个RelativeLayoutwith heightas WRAP_CONTENT,并且添加视图当时不会刷新整个容器..所以当您回答时,您可以显式向measure维度或invalidate视图添加一行以完全重新创建它。

在任何情况下LinearLayout最好选择,因为它会自动以horizontalvertical方式排列子项,您甚至可以在除最后位置之外的任何位置添加新视图,并且它将自动更新。


小智 -1

尝试在垂直线性布局中添加视图。以下链接可能对您有帮助

http://www.myandroidsolutions.com/2012/06/19/android-layoutinflater-turorial/

在 for 循环中膨胀您的布局。