2

我有一个##View##,它有许多子项,根据某些条件可能会显示也可能不会显示(通常,他们是否真的有要显示的信息)。

现在,有代码大约说:

if (conditionA) {
  viewA.setVisibility(VISIBILE);
} else {
  viewA.setVisibility(GONE);
}

if (conditionB) {
  viewB.setVisibility(VISIBILE);
} else {
  viewB.setVisibility(GONE);
}

...

if (conditionA || conditionB || ...) {
  parentView.setVisibility(VISIBILE);
} else {
  parentView.setVisibility(GONE);
}

这似乎真的很糟糕。有没有更好的办法?

4

1 回答 1

0

您可以继承 ViewGroup 并将检查放在 onDraw() 中。像这样的东西应该工作:

public class MyViewGroup extends ViewGroup{
    boolean anyVisible
    @Override
    protected void onDraw(Canvas canvas){
        anyVisible = false
        for(int i = 0; i < this.getChildCount(); i++){
            if(this.getChildAt(i).getVisibility() == View.VISIBILE){
                anyVisible = true;
            }
        }

        this.setVisibility(anyVisible);
        super.onDraw(canvas);
    }
}

如果您使用不同的父布局,只需更改ViewGroup为您的父类型,即LinearLayout

然后在您的布局 xml 中将您的父视图更改为如下所示:

<com.your.package.name.MyViewGroup ...>
.
.
.
</com.your.package.name.MyViewGroup>
于 2012-11-09T02:30:37.050 回答