SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

サンプルアプリでおぼえる実践的Android入門

~実用的な電卓アプリを作る

電卓のベース処理を修正する

 さて、これまでに作成した電卓のベース部分では、演算結果を標準出力に表示する仕様でした。これを、先ほどXMLでレイアウトしたTextViewに表示するように変更します。

 「StringDisplay.java」のshowDisplayメソッドを修正して、TextViewを更新できるように変更します。

public class StringDisplay extends AbstractDisplay {
    private TextView txt;  //  ←追加
    public StringDisplay( TextView disp ) {
        clear();
        this.txt=disp;  //  ←追加
    }
    ・・・省略・・・
    public void showDisplay(boolean format) {
        ・・・省略・・・
        txt.setText(sb);  //  ←追加
    }
・・・省略・・・

 「Calc.java」では、StringDisplayに更新対象となるTextViewのインスタンスを渡すためのメソッドを追加します。

public void setDisp(TextView txt){
    this.disp = new StringDisplay(txt);
}

電卓のベース処理をMainActivity.javaに組み込む

 では次にお待ちかねのAndroidのプログラミングを説明していきます。「MainActivity.java」の編集です。電卓のベース処理を組み込み、MainActivityクラスにonClickButtonメソッドを実装してボタンが押されたときの処理を記述していきます。

MainActivity.java
public class MainActivity extends Activity {
    Calc calc = new Calc();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView txtDisp = (TextView) findViewById(R.id.display);
        calc.setDisp(txtDisp);
    }

    public void onClickButton(View view) {

        switch (view.getId()) {
        case R.id.zero:
            calc.onButtonNumber(Number.ZERO);
            break;
        case R.id.doublezero:
            calc.onButtonNumber(Number.DOUBLE_ZERO);
            break;
        case R.id.one:
            calc.onButtonNumber(Number.ONE);
            break;
        case R.id.two:
            calc.onButtonNumber(Number.TWO);
            break;
        case R.id.three:
            calc.onButtonNumber(Number.THREE);
            break;
        case R.id.four:
            calc.onButtonNumber(Number.FOUR);
            break;
        case R.id.five:
            calc.onButtonNumber(Number.FIVE);
            break;
        case R.id.six:
            calc.onButtonNumber(Number.SIX);
            break;
        case R.id.seven:
            calc.onButtonNumber(Number.SEVEN);
            break;
        case R.id.eight:
            calc.onButtonNumber(Number.EIGHT);
            break;
        case R.id.nine:
            calc.onButtonNumber(Number.NINE);
            break;

        case R.id.plus:
            calc.onButtonOp(Operation.PLUS);
            break;
        case R.id.minus:
            calc.onButtonOp(Operation.MINUS);
            break;
        case R.id.times:
            calc.onButtonOp(Operation.TIMES);
            break;
        case R.id.divide:
            calc.onButtonOp(Operation.DIVIDE);
            break;

        case R.id.comma:
            calc.onButtonNumber(Number.COMMA);
            break;
        case R.id.allclear:
            calc.onButtonAllClear();
            break;

        case R.id.clear:
            calc.onButtonClear();
            break;

        case R.id.equal:
            calc.onButtonEquale();
            break;

        case R.id.sign:
            calc.changeSign();
            break;

        default:
            break;
        }
    }
}

 onClickButtonメソッド内では、switch-case文で押されたボタンを判定して、Calcクラスのメソッドを呼び出しているだけです。 実はAndroid側のコーディングはたったこれだけです。これだけのコーディングでもちゃんと動いてくれます。

 では早速実行してみましょう。

 どうでしょう! これだけでも十分に電卓としての役目を果たしてくれています。

 ただ、まだエラーハンドリングができていませんので、1÷0=と入力すると「Infinity」と表示されてしまいます。また演算結果が12桁以上になり、電卓の表示桁から溢れてしまう場合、上位桁しか表示されませんが、桁あふれしたことが分かりません。これは正しくエラー処理して、ユーザに通知する必要があります。

 次からはエラー処理の追加をしていきたいと思います。

 ここまでのコーディングに使用したプロジェクトファイルも、「サンプルファイル(途中経過)」として記事に添付しています。

次のページ
新しい状態(State)を追加する

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

金田 浩明(カネダ ヒロアキ)

ソフトウェア開発者。分析・設計・実装なんでもあり。システム開発をしたり情報処理技術を研究したりスマートフォン開発したりと色々やっています。最近はiPhone,Andoridでの画像認識の仕事に没頭中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5957 2011/06/14 14:00

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー