セレクトボックスだけ使いたいのだが何か?
アンドロイドのセレクトボックスってボタンにリンクしている。
これは、これで便利なのだが、メニューからセレクトボックスを
表示して使いたい時には、逆に邪魔になる。
単品でセレクトボックスを使いたい!
で、方法が無いのかと思いきや、
「spinner = new Spinner(this);」って記述が可能なので
多分単品で呼び出すことができるはず!
…
と推測。
で、調べて回ると…
「performClick」を見つけた。
セレクトボックスは、表示されているボタンも含めた一連の処理らしい。
だが、ボタンが邪魔なので表示しないように作成すると
ボタンをクリックするすることができない。
その状態でクリックを処理するために「performClick 」があるようだ。
表示されていなくても内部でボタン処理は、厳然とあるらしい。
実際、どのような制作過程かは、分からないが一つの完成した処理を
分割するより、同等の信号を与える方が簡単に実現できる場合がある。
どうも、制作したプログラマーは、そうしたらしい…。
そんな事を考えると面白い。
こんな感じで作ってみる。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.add("1");
adapter.add("2");
...
spinner = new Spinner(this);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
spinner.performClick();
で、リストボックスが表示される。
めでたしめでたし…。
…
…
…
などと思ったのが甘かった!
何やっても「onItemSelected」が呼ばれない!!!
つまり結果を得られない!
…
…
…
何が悪いのか?
…
…
…
色々試してみたが…
結論として「View」も含めたシステムと言う事らしい。
つまりレイアウトを登録しないと駄目って事。
じゃあ、こんな感じに登録しておいて非表示にすれば良いのか?
setContentView(R.layout.main);
View layoutSpinner = View.inflate(this, R.layout.spinner, null);
addContentView(layoutSpinner, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
layoutSpinner.setVisibility(View.INVISIBLE);// ※リストボックスのあるレイアウトを非表示
とやってみたらできた。
レイアウトが非表示だと、その中にあるものも
ディセーブルされるかと思ったが、そんな事は無いようだ。
…
「spinner = new Spinner(this);」は、幻だったのね…。(T_T)
すっきりしない、裏から手を回すようなやり方だけど…
目的は、達せられるので良しとする!
…
誰か、良いやり方があったら教えてください…。(T_T)
参考まで…「020.zip」をダウンロード
| 固定リンク
コメント