OptionMenuを表示させるAndroidサンプルアプリです!
※はじめに
この記事はAndroidアプリの開発が、初心者であるという方のための記事です。
そのため、なるべく複雑な説明は避け、コピー&ペイストですぐに動くものをご紹介します。
JavaやAndroidを理解されている方で細かい説明が必要な方は、当ブログ内の連載記事である「Android Tips」をご覧ください。
このアプリはCheckBoxの状態に応じて、onPrepareOptionsMenu()を用いて、表示されるオプショントメニューを切り替えるというものです。
アプリ完成図
MainActivity.java
package com.example.contextmenu2;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private String[] item = { "java", "Network", "Linux" };
private String[] java = { "OCJ-P Bronze", "OCJ-P Silver", "OCJ-P Gold" };
private String[] network = { "CCNA", "CCNP", "CCIE" };
private String[] linux = { "LPIC 1", "LPIC 2", "LPIC 3" };
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, item);
listView = (ListView) findViewById(R.id.listView1);
listView.setAdapter(adapter);
// コンテキストメニューのタッチ対象ウィジェットをregisterForContextMenu()を用いて指定
registerForContextMenu(listView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// 第3引数のmenuInfoを使用します。
// ContextMenuInfoオブジェクトは長押したウィジェットがListViewなどのリストの場合に使用します。
AdapterContextMenuInfo adapterInfo = (AdapterContextMenuInfo) menuInfo;
menu.setHeaderTitle((String) listView
.getItemAtPosition(adapterInfo.position));
long listId = adapterInfo.id;
String arrayId = String.valueOf(listId);
if (arrayId.equals("0")) {
menu.add(0, 0, 0, java[0]);
menu.add(0, 10, 1, java[1]);
menu.add(0, 20, 2, java[2]);
} else if (arrayId.equals("1")) {
menu.add(1, 0, 0, network[0]);
menu.add(1, 10, 1, network[1]);
menu.add(1, 20, 2, network[2]);
} else if (arrayId.equals("2")) {
menu.add(2, 0, 0, linux[0]);
menu.add(2, 10, 1, linux[1]);
menu.add(2, 20, 2, linux[2]);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo adapterInfo = (AdapterContextMenuInfo) item
.getMenuInfo();
long id = adapterInfo.id;
String str = String.valueOf(id);
if (str.equals("0")) {
if (item.getItemId() == 0) {
Toast.makeText(this, java[0], Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == 10) {
Toast.makeText(this, java[1], Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == 20) {
Toast.makeText(this, java[2], Toast.LENGTH_SHORT).show();
}
} else if (str.equals("1")) {
if (item.getItemId() == 0) {
Toast.makeText(this, network[0], Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == 10) {
Toast.makeText(this, network[1], Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == 20) {
Toast.makeText(this, network[2], Toast.LENGTH_SHORT).show();
}
} else if (str.equals("2")) {
if (item.getItemId() == 0) {
Toast.makeText(this, linux[0], Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == 10) {
Toast.makeText(this, linux[1], Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == 20) {
Toast.makeText(this, linux[2], Toast.LENGTH_SHORT).show();
}
}
return super.onContextItemSelected(item);
}
}
[divider]
activity_main.xml
今回の画面の定義(activity_main.xml)はデフォルトのtextviewにidのみ追加しています。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
これでOKです。


