前回に引き続き、Androidディベロッパーのページを参照しながら自作アプリの製作に挑む!
今回は、アクションメニューバーに追加したアイテムをクリックしたときの動作を設定する「Respond to Action Buttons」でのサンプル記述をコピペしたときにすんなり行かずエラーになったのでそのときの対処方法を探しました。冷静に考えれば原因がわかるものなのですが、手っ取り早く次に進みたかったので検索して答えを得ました。
参考:openSearch() in Android beginners app not defined
まず、こちらを参照しコピペした記述は以下のとおり
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_settings: openSettings(); return true; default: return super.onOptionsItemSelected(item); } }
ということで、実際にコピペしたときのEclipseでの見た目はこんなんになりました。
上の画像にあるとおり、「openSearch」と「openSettings」がエラーになっています。
エラーの原因
ここでエラーになっている理由は「openSearch()」と「openSettings()」というメソッドが存在しないためです。
個人的にはメゾッド(methodの発音に基づく)と読みますが、日本語では“メソッド”と呼ばれます。「メソッド」というのは、特定の動きをする記述を別に書いて置けるんですね。メソッドをたとえてみます。たとえば「寝る前にすること」というメソッドを作成します。その中に、晩御飯を食べる、お風呂に入る、歯を磨く、明日の準備をするなどのやるべきことを定義しておくと、「寝る前にすること()」とそのメソッドを呼び出すだけで実行できます。
ここでは、openSearch()やopenSettings()というメソッドがないので、このまま実行しても何もできないですよーという状態でエラーになっています。なので、ふさわしいメソッドを用意すればエラーが解消されます。
openSearch()とopenSettings()のメソッドを作成する
コピペした記述の下に以下の記述を追加します。
private void openSearch() { Toast.makeText(this, "Search button pressed", Toast.LENGTH_SHORT).show(); } private void openSettings() { Toast.makeText(this, "Setting menu is selected", Toast.LENGTH_SHORT).show(); }
Eclipseでの見た目はこんな感じになる。
上記では、「Toast」に赤波線が引かれている。これは、「Toast」というclass(クラス)を用いてトーストの表示を行うというものなのだが、「Toast」というクラスが存在していないためにエラーになっている。
クラスというのは機能がたくさん収められた箱のようなイメージで、「.」を使ってその機能の中の特定のものを実行することができる。たとえば「電話」というクラスがあったとしたら「電話.かける」みたいな使い方と思ってくれればいい。Toast.makeTextでトーストに表示される文字列と表示時間(Toast.LENGTH_SHORT)を指定して短い時間トーストを表示するという設定を行い、それを表示(.show())している。
Toastを使ったのは参考にしたサイトに記載があるとおりを利用したためであって、トーストを表示させる以外の動作を追加してもいい。たとえば「openSettings()」に以下の記述をすれば、設定が開くようになる。
startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
少し話がずれたが、Toastに赤波線が引かれている状況を修正しなければいけない。ここでは、「Toast」というクラスを参照(import)させればいいのだが、Eclipseの機能を使うととても簡単にできる。
左に表示されている電球をクリックし、表示されるウィンドウから「Import ‘Toast’ (android.widget)」をダブルクリックすれば、自動的に「import android.widget.Toast;」という記述がファイル上部に追加されエラーが解消されます。
これでエラーがなくなりました。以下の画像は、openSettings()に「startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);」を利用した場合です。
これで、検索アイコンをタップした場合はトーストが表示されるようになり、メニューから設定をタップした場合は、本体設定が開くようになりました。
以上です。
参考:
http://developer.android.com/training/basics/actionbar/adding-buttons.html#Respond
http://stackoverflow.com/questions/18727033/opensearch-in-android-beginners-app-not-defined
http://stackoverflow.com/questions/7966308/how-to-open-settings-of-android-phone-on-a-button-click-in-our-android-app
http://developer.android.com/reference/android/widget/Toast.html
コメント