我有一个Android视图,我可以覆盖onLayout(boolean changed, int l, int t, int r, int b)
。此视图绑定到列表视图中的项目,因此视图往往会被重用。对于某些商品,我childViewA.layout(l, t, r, b)
和其他商品,我不会。也就是说,child view A
仅在某些项目中可见。但是,当我使用这个逻辑时,child view A
只是保留其在前一项中的布局中的位置。它并没有像预期的那样消失,只是因为我们没有在当前视图绑定中调用layout(l, t, r, b)
。它保持原来的早期绑定。任何人都知道它为什么这样工作?我假设每个视图都在每个布局调用中重新布局,而不仅仅是从早期的布局调用重新定位。我是打电话给setVisibility
的唯一出路吗?
示例方法:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (condition) {
childViewA.layout(l1, t1, r1, b1);
}
childViewB.layout(l2, t2, r2, b2);
childViewC.layout(l3, t3, r3, b3);
}
答案 0 :(得分:0)
试试这个:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (condition) {
childViewA.layout(l1, t1, r1, b1);
}
else{
childViewA.layout(0, 0, 0, 0);
}
childViewB.layout(l2, t2, r2, b2);
childViewC.layout(l3, t3, r3, b3);
}
问题在于,当你不希望它存在时,你根本就没有给childViewA打电话布局 - 所以它保留了原来的布局。