" unlayout"重用视图时View#onLayout中的子视图

时间:2016-02-04 10:31:47

标签: android layout view

我有一个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); 
}

1 个答案:

答案 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打电话布局 - 所以它保留了原来的布局。