【android】BottomNavigationViewでクリックイベントを発生させる

製作 プログラム

2017/07/10(月)

BottomNavigationViewでクリックイベントを発生させよう!

アンドロイドでアプリ開発を行っているとほとんどの場合一画面だけのアプリにはならず、画面の切替が必要になってくると思います。

BottomNavigationViewは画面下部に表示できるメニューで、特にソースコードを書かなくてもカッコのよい遷移アニメーションを自動でつけてくれるイカしたメニューです。

今回はこのBottomNavigationView内の各メニューボタンに対するクリックイベント(スマホだからタッチイベントですね)を好きなタイミングで発生させる方法を紹介しますね。

方法はだいたい3通り

BottomNavigationViewのメニューボタンのクリックイベントを発生させる方法についていろいろ調べたところ、クリックイベントを発生させる方法は以下の3つが見つかりました。それぞれ「☆」印にはメニューボタンのID(R.id.~)が入ります。

  1. setSelectedItemId(☆)
  2. findViewById(☆).performClick()
  3. getMenu().findItem(☆).setChecked(true)

3つの方法のうち①②番は書き方が違うだけで同じ動作をし、残る③についてはまるきり動作が異なるコトがわかりました。

①②番はこの関数を呼び出したタイミングで実際にクリックイベントが発生するのに対し、③番の「getMenu().findItem(☆).setChecked(true)」は、選んだメニューボタンが押された状態にするだけでクリックイベントは発生しません。ココ注意が必要ですね~。

念のため一つずつ見ていきましょう。

①:setSelectedItemId()

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setSelectedItemId(R.id.menu_item);

ソースコードの中の色のついているところはそれぞれ自分のxmlで指定したViewのIDを指定してくださいね。このコードを任意のタイミングで呼ぶことでIDで指定したメニューボタンのクリックイベントを発生させることができます。

①:findViewById().performClick()

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.findViewById(R.id.menu_item).performClick();

②番目の方法は①番目の方法と同じで実際にIDで指定したメニューボタンのクリックイベントが発生します。書き方が違うだけなのであんまり使わないかもしれませんね。

③:getMenu().findItem().setChecked(true)

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.getMenu().findItem(R.id.menu_item).setChecked(true);

③番目の方法はメニューボタンが押されたようになるだけで実際にはクリックイベントは発生しません。

「いつ使うの?」と思わずにはいられませんが、例えばアクティブになっているメニューボタンは変えたいけれど、クリックしたときとは別の処理を行いたい場合なんかには使えると思います。

クリックイベント発生のまとめ

今回はアンドロイドのアプリ開発でBottomNavigationViewを使ったとき、好きなタイミングでクリックイベントを発生させる方法を紹介しました。

ぼく自身はけっこう③番目の方法が使えるなと思いました。メニューは動かしたいけどクリックイベントは発生させたくない場合って思ったよりある気がします。参考にしてみてくださいね!

内容間違いや「もっとこうやったほうがいいよ!」ていうのをご存知のアンドロイド開発プロフェッショナルな方、下記Messageよりコメントどしどしお待ちしております!