複数のボタンからの処理を実装してみる
今回は、1画面に複数ボタンがある場合の処理について勉強したいと思います。
目標は、四則演算です!
前回まで作っていたアプリに改造を加えていきます!
それでは、やってみます!
1. レイアウト作成
四則演算するため、ボタンを追加します!
ボタンは横に4つ並べることとします。
LinearLayoutで定義しました。
うーん、ボタンの大きさがちょっと違う・・?
LinearLayoutでは横一列に並んだボタンの比率を指定できるようなので試してみます。
きれいに揃いました!
4つすべてのボタンのlayout_weightに1を指定しました。
これによって4つのボタンが1:1:1:1になることが分かりましたね!
2. イベントリスナーを追加
ボタンがクリックされた時に反応するよう、各ボタンにイベントリスナーを追加していきます。
イベントリスナーについては以前触れているので、そちらもご覧ください。
では、イベントリスナー追加後の実装がこちらです!
29行目、32行目、35行目、38行目でそれぞれのボタンにイベントリスナーを追加しています。
3. 計算処理の実装
次はonClickメソッドに計算処理の実装です。
メソッド名はonClickで固定なので、ボタンごとにメソッドを作成することは出来ないですね。
複数ボタンがある場合は、onClickメソッドの引数であるViewクラスの変数vを使うとうまくいくみたいです!
ViewクラスにはgetId()メソッドが用意されており、idを確認することによってどのボタンからonClickメソッドが呼ばれたかが判断できるようです。
では、idによる分岐処理を実装していきます。
追加した部分は以下の通りです。
- [66行目] onClickの引数vのView#getIdを実行し、結果によってcase文で分岐させます。
- [68行目] View#getIdの結果がR.id.plusの場合の処理を記述します。中身は前回までのを流用。
- [79行目] View#getIdの結果がR.id.minusの場合の処理を記述します。
- [83行目] View#getIdの結果がR.id.multiの場合の処理を記述します。
- [87行目] View#getIdの結果がR.id.divの場合の処理を記述します。
onClickの引数vがnullになることはあるのでしょうか。
nullかどうかの確認は今回入れてませんが、引数vがnullだと例外が発生してしまいます。
それぞれの計算処理を実装して実行してみましょう!
4. 動作確認
それぞれ計算してみました!
Long型に結果を格納しているので、少数点以下の桁に対応が出来ていませんでした。汗
あと、Number2に0を入れると・・・・
0では割り算できないのでエラーになります。
電卓とか作る場合は、0で割られることを考慮して実装が必要ですね。
とりあえず四則演算は出来たので今回はここまでとします!
お疲れさまでした!!