駆け出しエンジニアぱかぱかの成長記録

引くほど忘れっぽい新卒2年目駆け出しSEぱかぱかの備忘録です。

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

こんばんは!

仕事終わりでモスバーガーに来ているぱかぱかです!

(もはやお決まりなのでハンバーガーの写真は割愛)

 

例のごとく今日も日記パートから始まります。

昨日は仕事終わりにRRRというインド映画を観てきました!

映画好きの会社の先輩が6回も(!?)見に行ったと言っていたので

気になっていたのですが、想像以上に面白かったです。

インド映画自体が初めてだったのですが、

王道できっと何事もうまくいくのだろうという謎の安心感と

主人公二人の真っ直ぐで熱い生き様が逆に新鮮…!

普通に元気出ましたし、観終わるとなんかスッキリしました。

ミュージカルがちょっと苦手なのですが

インド映画特有の突然始まるダンスもキレキレで楽しくて見入っちゃいましたね…
(今日は仕事中ずっと頭の中ナートゥナトゥナトゥでした)

今度、他のインド映画も観てみたいと思います😳

 

 

それでは今日はコンテキストメニューについてまとめていきます!

 

コンテキストメニューって何?

コンテキストメニューはリストビューを長押しした時などに表示されるメニューです。

前回作成したオーバーフローメニューと似ていて、作り方もほとんど一緒です。

長押しすると出てくる

それでは早速作っていきましょう!

 

①メニュー用のxmlファイルを用意

オプションメニューと同じように、まずはxmlファイルを作ります。

メニュー用のxmlファイルはmenuタグで始まり

この中に選択肢1つにつきitemタグを1つ記述というのも同じです。


<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/regist_watch_list"
android:title="@string/register_watch_bird" />
<item
android:id="@+id/delete_want_list"
android:title="@string/delete_want_bird" />
</menu>

今回は見たい鳥リストの鳥を長押しした時に

「発見した鳥に登録」と「見たい鳥リストから削除」の

2つのメニューを選択肢を作ることにしました。
(仕様を考えず思いつきで進めているので後で大変なことになりそう…)

 

itemタグには以下の2つの属性を記述する必要があります。

・id

 R値として使用するid

android:title

 選択肢の表示文字列

オーバーフローメニューにあったshowAsActionは今回ありません。

 

②アクティビティでxmlファイルをインフレイト

xmlの画面部品をJavaオブジェクトにするインフレイトです。

これもオーバーフローメニューと同じになります。

アクティビティクラスにonCreateContextMenu()メソッドを記述して

その中でインフレイトしてあげます。

ヘッダタイトルも追加できるので「操作を選んでください。」という文言を設定。

override fun onCreateContextMenu(menu: ContextMenu, view: View, menuInfo: ContextMenu.ContextMenuInfo) {
// 親クラスの同名メソッド呼び出し。
super.onCreateContextMenu(menu, view, menuInfo)
// コンテキストメニューxmlファイルをインフレイト。
menuInflater.inflate(R.menu.menu_context_menu_list, menu)
// コンテキストメニューのヘッダタイトルを設定。
menu.setHeaderTitle(R.string.menu_list_context_header)
}

 

コンテキストメニューを表示する画面部品を登録

onCreate()メソッドの中で以下のメソッドを記述することで

コンテキストメニューを表示するビューを登録してあげます。

registerForContextMenu(lvBirds)

 

コンテキストメニュー選択時の処理を実装

ここで「発見した鳥に登録」と「見たい鳥リストから削除」の

2つの処理を実装してあげたいところなのですが

今は配列をコードでベタ打ちしている状態なので

DBの連携ができてから実装することにしたいと思います😅

 

というわけで本日の成果は

長押しでコンテキストメニューが表示されるとこまでです!

早く選択肢の処理を実装したい…

 

読んでくださりありがとうございました!

ではまた!