メニューアイテムの更新

ライブラリの説明、特にActivity辺りの関数の説明はちゃんと読んでおかないとなあと昨日半日ほど調べて実験に費やしてしまった反省から考えてます。
何かキーイベントを発生させたらいいんじゃないかと思って試してみても、むなしく例外が発生するばかり。最後にもう一度落ち着いてライブラリを探してみると1つ関数を呼べばやりたいことは1行で可能でした。
ショックでかい。

Clockoidの中で設定メニューで行っていた壁紙表示のON/OFFをオプションメニューに持ってきました。
その関係でメニューアイテムを更新してやる必要が出てきました。

onCreateOptionsMenuでメニューを作成したあと、onPrepareOptionsMenuが呼び出されるのでここで設定すればいいのだろうと思い、何も考えず add したところ、メニューがどんどん増殖していきました。
add してるんだから、当たり前なのですけど。

じゃあどうしようと onPrepareOptionsMenu で menu.clear してから再登録していたら、これがまた遅くてメニューが開くまでに数秒、間があいてしまう状態になりました。

しかし、考えてみると onOptionsItemSelected の引数はMenuItem です。
そして、ここの引数で与えられた変数に対して setTitle/setIcon してみると内容が入れ替わりました。

なーんだ。簡単なことだったんだ。

行頭のTABなどがどうあっても除去されてしまうので見づらいですが、以下、ソース。

public boolean onOptionsItemSelected(MenuItem item) {
switch ( item.getItemId() ) {
case M_ID_1:
if ( checkItOut() == false ) {
turnItTrue();
item.setTitle(getString(R.string.option_menu_2));
item.setIcon(image_off);
} else {
turnItFalse();
item.setTitle(getString(R.string.option_menu_1));
item.setIcon(image_on);
}
return true;
default:
return false;
}
}

こんな感じ。

メニューが開くまでの時間も通常通りに戻ったので、一安心。

広告

About sato_c

小学生の頃にインベーダーゲームやPC-8001やApple][といったものを知ってしまい、それ以降ずーっとゲーム好き。でも、あんまりうまくはありません。 仕事は当初はゲーム関係のプログラムやサウンドをやっていましたが、WEB関係を通ったあと、遊技機関係のプログラムやサウンドをやっています。あまり節操がないのか。 現在はJavaですてきなコードを書けるように勉強中。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。