読者です 読者をやめる 読者になる 読者になる

【Android】コンテキストメニュー

 

f:id:stanleyblenz:20161113182509p:plain

 

 

 

コンテキストメニュー

長押しでメニュー表示を表示させる仕組みです。

 

 

(リストビューに機能を配置する例です。)

layout/activity_main.xml

<ListView
  android:id="@+id/listview"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>

 

menu/context_menu.xml

<menu
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="wrap_content"
  android:layout_width="wrap_content">
  <item
    android:id="@+id/context_menu_share"
    android:title="共有"/>
</menu>

 

MainActivity.java

//コンテキストメニューの登録

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  ListView lv = (ListView)findViewById(R.id.listview);
  registerForContextMenu(lv);
}

//コンテキストメニューの作成

@Override
public void onCreateContextMenu(ContextMenu menu,

                                                       View v,

                                                      ContextMenu.ContextMenuInfo menuInfo){
  super.onCreateContextMenu(menu, v, menuInfo);
  menu.setHeaderTitle("メニュー");
  getMenuInflater().inflate(R.menu.context_menu, menu);
}
//コンテキストメニューの選択処理

private MenuItem item;
@Override
public boolean onContextItemSelected(MenuItem item){
  switch(item.getItemId()){
    case R.id.context_menu_share:
      this.item = item; ※別メソッドで使用する場合のために保持
      this.share();
      return true;
    default:
      return super.onContextItemSelected(item);
  }
}

private void share() {
  AdapterView.AdapterContextMenuInfo info =

    (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

  ListView lv = (ListView)findViewById(R.id.listview);
  String title = (String)lv.getItemAtPosition(info.position);
  //ListViewに設定している項目を取得
}