「更新」ボタンを追加する

 Androidでは、携帯端末のメニューボタンを押すと画面上にメニューが現れる仕組みになっている。メニューボタンを押した時の処理は、「onCreateOptionsMenu」メソッドをオーバーライドして実装する。メニュー項目を選択した時の処理は、同じく「onOptionsItemSelected」メソッドをオーバーライドして実装する。

 早速メニューに「更新」ボタンを追加してみよう。ネットワークにアクセスしてRSSを再度取得し、記事リストを最新の状態に更新するボタンである。まず、「RssReaderActivity.java」の先頭に、選択したメニュー項目の位置を示す定数「MENU_ITEM_RELOAD」を宣言する。

public static final int MENU_ITEM_RELOAD = Menu.FIRST;

 次に、メニュー作成の際にコールされる「onCreateOptionsMenu」メソッドをオーバーライドしてRssReaderActivity.java内に実装する。メニュー項目はaddメソッドで追加できる。引数にはそれぞれ「メニューグループの識別ID」「メニュー項目の識別ID」「アイテムの順序」「メニュー項目名」を指定する。

// MENUボタンを押したときの処理
@Override
public boolean onCreateOptionsMenu(Menu menu) {
	boolean result = super.onCreateOptionsMenu(menu);
	// デフォルトではアイテムを追加した順番通りに表示する
	menu.add(0, MENU_ITEM_RELOAD, 0, "更新");
	return result;
}

 さらに、「onOptionsItemSelected」メソッドもオーバーライドして実装する。先ほど指定した「メニュー項目の識別ID」をもとに、switch文でそれぞれの項目に対する処理内容を記述すればよい。

// MENUの項目を押したときの処理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
	switch (item.getItemId()) {
		// 更新
		case MENU_ITEM_RELOAD:
			// アダプタを初期化し、タスクを起動する
			mItems = new ArrayList();
			mAdapter = new RssListAdapter(this, mItems);
			// タスクはその都度生成する
			RssParserTask task = new RssParserTask(this, mAdapter);
			task.execute(RSS_FEED_URL);
			return true;
	}
	return super.onOptionsItemSelected(item);
}

 それでは、早速実行してみよう。メニューボタンを押すと、画面下部にメニューが表示されているのがわかるはずだ(図2)。

図2●メニューに「更新」ボタンが追加された
図2●メニューに「更新」ボタンが追加された
[画像のクリックで拡大表示]

 今回開発したアプリは、RSSを取得して解析・表示するだけのシンプルなRSSリーダーである。だが、このアプリをベースに機能を追加してみるのもよいだろう。

 さて、全6回に渡る連載も今回で最後である。周知の通り、Androidを取り巻く状況は急激に変化している。Android搭載端末は今後国内で加速度的に普及していくだろう。また、Android Marketに新たに登録されるアプリの本数は日を追うごとに増加する傾向にある。

 さらには、ITproの「Android Application Award 2010 Spring」が開催中だ。スマートフォン向けのアプリ開発においては、単に技術力だけでなく、発想力やマーケティング的な視点など、様々なものが求められる。

 この連載をご愛読いただいた読者の方々も、この春はAndroidアプリが秘める大きな可能性にぜひともチャレンジしてほしい。

中川善樹(なかがわよしき)
アシアル株式会社 エンジニア
中川善樹(なかがわよしき)Web開発,中でもPHPでの開発に目覚めアシアルに入社。現在ではPHPでのシステム開発に加え,Ajax技術を用いたRIA(rich internet application)開発,iPhoneやAndroidなどのスマートフォン開発も手がけ,ユーザビリティの高いサイト作りに気を配る。Android版の「Abacus」など,最新のアプリケーションをいち早く市場に投入することを目指している。