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 に答える