我需要在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--;
}
答案 0 :(得分:3)
问题是,当您删除视图时,RelativeLayout的子项列表会缩小,并且您不会考虑这一点。
让我们说我的RelativeLayout有两个孩子,我正在使用你的for循环删除它们。
relativeLayout.getChildAt(1)
,这是空的,因为唯一的孩子在第0位。第二个孩子永远不会被删除。这个问题有多种解决方案。一个常见的方法是向后遍历子项列表,以便您始终只删除最后一项。