Android SDKでメニュー項目を動的に操作する

test128_01.png
以前にAndroid SDKで「menu」ボタンでメニューを表示するでメニューを表示した。onCreateOptionsMenu()でメニュー項目を作り表示、onOptionsItemSelected()で選択されたメニュー項目を実行できる。

しかしonCreateOptionsMenu()は初回に1度だけ呼ばれるのみなので、動的にメニュー項目を増やしたり減らしたり、表示するメニューの文字を変えることはできなかった。動的にメニュー項目を変更するにはonPrepareOptionsMenu()をオーバーライドして、そこでメニュー項目を操作する。
package com.Test128;

import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;


public class Test128Act extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		super.onCreateOptionsMenu(menu);

		int		nId = 0;

		menu.add(0,nId++,Menu.NONE,"AAA").setIcon(android.R.drawable.ic_menu_set_as);
		menu.add(0,nId++,Menu.NONE,"BBB");
		menu.add(0,nId++,Menu.NONE,"CCC").setIcon(R.drawable.icon);


		return true;
	}


	@Override
	public boolean onPrepareOptionsMenu(Menu menu)
	{
		String	str;

		str = Calendar.getInstance().getTime().toString();
		menu.findItem(1).setTitle(str);

		return true;
	}

	
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		Log.d("Test124","MenuSelected " + item.getItemId() + " " + item.getTitle());

		switch(item.getItemId())
		{
		case 0:
			return	true;

		case 1:
			return	true;

		case 2:
			return	true;

		default:
			break;
		}

		return super.onOptionsItemSelected(item);
	}
}

test128_02.png
これでメニューを動的に操作して、表示するたびにそのときの日時をメニューとして表示することができた。




プロジェクトファイルをダウンロード


カテゴリー「android」 のエントリー