3.5. 処理の実装

このアプリの処理として、「計算」 ボタンをクリックすると計算結果として一人当たりの金額を表示します。なので処理の実装として、「計算」 ボタンをクリックしたときの処理を記述していきます。

対象のファイルについて

処理を実装していくファイルですが、これもプロジェクト作成時に自動的に生成されています。
パッケージエクスプローラの [src] - [jp.sample.splitthecost] にある [MainActivity.java] ファイルです。
開いてみると既にコードが記述されています。


クラス宣言の行ですが、extends Activity と記述されています。
Android の画面は Acctivity クラスを継承したクラスとして作成するので、extends Activity として Activity クラスを継承したクラスが宣言されています。
(extends XXXX は、javaの記述で XXXX クラスを継承するという意味。)

次に、onCreate メソッドをオーバーライドしていますが、これはアクティビティが起動する時に呼ばれるメソッドです。
なので、この中にアクティビティが起動する時の処理を記述します。

この中で super.onCreate(~) と記述し、親クラスの onCreate(~) を呼び出します。これはクラスを継承するときは必須の処理です。

また、setContentView(R.layout.activity_main) という行がありますが、これは "画面作成" で作成した画面レイアウトを定義した activity_main.xml をこのクラスに設定するという意味です。
Android では各リソースにリソース ID が割り当てられ、それを R クラスで管理しています。なのでプログラムでリソースにアクセスするときは R クラスから取得することになります。
この記述によって、先ほど定義した画面がこのクラスで表示されることになります。

では、これに「計算」ボタンを押したときの処理を記述していきます。

ボタンクリック処理の実装

ボタンを押したときの処理は、以下のように記述します。 記述する場所は、onCreate(~)メソッドの中の、setContentView(R.layout.activity_main); の下の行です。

Button btn = (Button)findViewById(R.id.btnCalc);
btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // ここに処理を記述
    }
});

まず findViewById ですが、これは activity_main.xml で定義したボタン等のインスタンスを取得する記述です。引数には定義したidを指定します。 「計算」ボタンには btnCalc という id を設定したので、R.id.btnCalc とします。

上記コードを追加すると、以下のように Button の文字に赤の下線が出ると思います。
Button にカーソルを合わせると、上の様にポップアップが表示されます。ここで、「'Button' をインポートします (android.widget)」 をクリックすると、Button の文字の赤線が消えます。
Buttonクラスは、androidSDKの中のパッケージで用意されており、android.widget パッケージ内にあります。 本来 Java 言語では、 android.widget.Button のように記述しなければならないのですが、 毎回上記のように記述するのは面倒なので、Java言語ではこれを Button と省略して記述することができます。 省略するためには、ファイルのpackage宣言の後に、以下のような import 文を記述します。
import android.widget.Button;
なお、先ほどの「'Button' をインポートします (android.widget)」 をクリックした後に、 ファイルの上を見ると、 「import android.widget.Button;」 の記述が自動的に追加されているのがわかります。
これは、eclipse の機能で、import文を自動的に追加してくれます。


これでボタンを取得できたので後はボタンが押されたときの処理を記述します。
ボタンが押されたときのイベントを受け取るようにするには、
setOnClickListener メソッドを使用します。
引数には OnClickListener インターフェースを実装したクラスのオブジェクトを指定します。
そのオブジェクトを new View.OnClickListener(){} で生成します。
その中のOnClickメソッドにボタンが押されたときの処理を記述していきます。
処理としては、

  1. 画面用のオブジェクトを取得
  2. 人数と金額に入力された内容を取得
  3. 割り勘の計算
  4. 結果表示用のテキストに計算結果を設定

となります。onClick の中に下のコードを記述します。

// オブジェクトを取得
EditText etxtNum     = (EditText)findViewById(R.id.eTxtNum);
EditText etxtMoney   = (EditText)findViewById(R.id.eTxtMoney);
TextView txtResult   = (TextView)findViewById(R.id.txtResult);

// 入力内容を取得
String strNum   = etxtNum.getText().toString();
String strMoney = etxtMoney.getText().toString();

// 数値に変換
int num   = Integer.parseInt(strNum);
int money = Integer.parseInt(strMoney);

// 割り勘計算
int result = money / num;

// 結果表示用テキストに設定
txtResult.setText(Integer.toString(result));

EditText に入力された文字列を取得するには getText メソッドを使用し、文字を設定するには setText メソッドを使用します。

上記までのコード全体は、以下のようになります。

package com.example.splitthecost;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btn = (Button)findViewById(R.id.btnCalc);
        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // オブジェクトを取得
                EditText etxtNum     = (EditText)findViewById(R.id.eTxtNum);
                EditText etxtMoney   = (EditText)findViewById(R.id.eTxtMoney);
                TextView txtResult   = (TextView)findViewById(R.id.txtResult);

                // 入力内容を取得
                String strNum   = etxtNum.getText().toString();
                String strMoney = etxtMoney.getText().toString();

                // 数値に変換
                int num   = Integer.parseInt(strNum);
                int money = Integer.parseInt(strMoney);

                // 割り勘計算
                int result = money / num;

                // 結果表示用テキストに設定
                txtResult.setText(Integer.toString(result));

            }
        });
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

これでボタンを押したときの処理の実装は終わりです。



次は・・・
次は、デバッグの方法について説明します。
4. デバッグ方法