Loop不会从RelativeLayout中删除所有需要的视图

时间:2016-04-21 14:16:48

标签: android textview

我需要在RelativeLayout中找到所有TextView,为此,我用于(;;)循环,但面对奇怪的问题,循环不会删除所有视图。如果布局有2个孩子,则1将被删除,1将保留。有时,循环会删除所有TextView,但是在下一次使用时仍会删除1。

这是我的代码:

            int viewCount = relativeLayout.getChildCount();

            for (int i1=0; i1 < viewCount ; i1++){
                if (relativeLayout.getChildAt(i1) instanceof TextView) {
                    relativeLayout.removeViewAt(i1);
                }
            }

修改

这是正确的循环:

while (viewCount != -1){
                if (relativeLayout.getChildAt(viewCount) instanceof TextView) {
                    relativeLayout.removeViewAt(viewCount);
                }
                viewCount--;
            }

1 个答案:

答案 0 :(得分:3)

问题是,当您删除视图时,RelativeLayout的子项列表会缩小,并且您不会考虑这一点。

让我们说我的RelativeLayout有两个孩子,我正在使用你的for循环删除它们。

  1. 在第一次迭代中,我删除了第一个子节点(在索引0处)。
  2. 我的RelativeLayout现在有一个孩子。第二个子项现在位于索引1,因为子项列表是长度为1的列表。
  3. 循环迭代到索引1
  4. 我打电话给relativeLayout.getChildAt(1),这是空的,因为唯一的孩子在第0位。第二个孩子永远不会被删除。
  5. 这个问题有多种解决方案。一个常见的方法是向后遍历子项列表,以便您始终只删除最后一项。