1. ホーム
  2. java

[解決済み] Android: setVisibility(View.GONE); または setVisibility(View.INVISIBLE); が動作しない理由

2022-02-04 06:46:41

質問

私の DatePicker とボタンは最初は見えないようにします。そして、マジックボタンを押すと、setVisibility(View.Visible)するようにしたいです。

ここで問題なのは、私が setVisibility(View.GONE) または setVisibility(View.INVISIBLE) は何も変化せず、コンポーネントが表示されたままです。

final DatePicker dp2 = (DatePicker) findViewById(R.id.datePick2);
final Button btn2 = (Button) findViewById(R.id.btnDate2);

dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE);
btn2.setVisibility(View.GONE);
btn2.setVisibility(View.INVISIBLE);

btn2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        TextView txt2 = (TextView) findViewById(R.id.txt2);
        txt2.setText("You selected " + dp2.getDayOfMonth()
            + "/" + (dp2.getMonth() + 1) + "/" + dp2.getYear());
    }
});

解決方法は?

かなり多くの問題があるようですね。まず、マジックボタンが定義されておらず、そのためのイベントハンドラもありません。

また、使ってはいけません。

dp2.setVisibility(View.GONE);
dp2.setVisibility(View.INVISIBLE); 

どちらか一方のみを使用します。から Androidドキュメント :

View.GONE このビューは不可視で、スペースを取らない。 レイアウトに使用されます。

View.INVISIBLE このビューは非表示ですが、まだ表示されています。 は、レイアウトのためにスペースを取ります。

この例では View.GONE の割り当てを View.INVISIBLE を1つ作成します。


置き換えてみてください。

final DatePicker dp2 = new DatePicker(this)

を使っています。

DatePicker dp2 = (DatePicker) findViewById(R.id.datePick2);  

他のウィジェットも同様です。

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);

        final DatePicker dp2 = new DatePicker(this);
        final Button btn2 = new Button(this);
        final Button magicButton = new Button(this);
        final TextView txt2 = new TextView(TestActivity.this);

        dp2.setVisibility(View.GONE);
        btn2.setVisibility(View.GONE);
        btn2.setText("set Date");

        btn2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                txt2.setText("You selected "
                    + dp2.getDayOfMonth() + "/" + (dp2.getMonth() + 1) 
                    + "/" + dp2.getYear());
            }
        });

        magicButton.setText("Magic Button");
        magicButton.setOnClickListener(new View.OnClickListener()    
            public void onClick(View arg0) {
                dp2.setVisibility(View.VISIBLE);
                btn2.setVisibility(View.VISIBLE);
            }
        });

    ll.addView(dp2);
    ll.addView(btn2);
    ll.addView(magicButton);
    ll.addView(txt2);

    setContentView(ll);
}