package jp.mixi.assignment.layout.beg; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; import jp.mixi.assignment.layout.beg.CalcModel.OPERATOR; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; @SuppressLint("UseSparseArrays") public class MainActivity extends Activity { /** 結果表示用フォーマット */ private static final NumberFormat DISPLAY_FORMAT = new DecimalFormat("0.########"); private static final Map<Integer, Integer> mNumberMap; private static final Map<Integer, OPERATOR> mOperatorMap; static { mNumberMap = new HashMap<Integer, Integer>(); mNumberMap.put(R.id.button0, 0); mNumberMap.put(R.id.button1, 1); mNumberMap.put(R.id.button2, 2); mNumberMap.put(R.id.button3, 3); mNumberMap.put(R.id.button4, 4); mNumberMap.put(R.id.button5, 5); mNumberMap.put(R.id.button6, 6); mNumberMap.put(R.id.button7, 7); mNumberMap.put(R.id.button8, 8); mNumberMap.put(R.id.button9, 9); mOperatorMap = new HashMap<Integer, OPERATOR>(); mOperatorMap.put(R.id.plus, OPERATOR.PLUS); mOperatorMap.put(R.id.minus, OPERATOR.MINUS); mOperatorMap.put(R.id.clear, OPERATOR.CLEAR); mOperatorMap.put(R.id.times, OPERATOR.TIMES); mOperatorMap.put(R.id.divide, OPERATOR.DIVIDE); mOperatorMap.put(R.id.calc, OPERATOR.EQUAL); } private CalcModel calc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); calc = new CalcModel(); setCalcResult(calc.getNowValue()); setupOnClickListener(); } @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; } // 各ボタンに対して押された時の動作をリンクさせる private void setupOnClickListener() { for (Integer key : mNumberMap.keySet()) { findViewById(key).setOnClickListener(new OnClickListener() { public void onClick(View v) { onClickNumber(v); } }); } for (Integer key : mOperatorMap.keySet()) { findViewById(key).setOnClickListener(new OnClickListener() { public void onClick(View v) { onClickOperator(v); } }); } findViewById(R.id.dot).setOnClickListener(new OnClickListener() { public void onClick(View v) { calc.putDot(); } }); } private void onClickNumber(View v) { calc.putNumber(mNumberMap.get(v.getId())); setCalcResult(calc.getNowValue()); } private void onClickOperator(View v) { calc.putOperator(mOperatorMap.get(v.getId())); setCalcResult(calc.getNowValue()); } // 結果を画面表示 private void setCalcResult(double result) { TextView v = (TextView) findViewById(R.id.result); v.setText(DISPLAY_FORMAT.format(result)); } }