5.3. 設定値による計算変更

3.アプリ作成 (サンプル)で作成したサンプルアプリに、設定画面での設定値により割り勘計算を変更する処理を追加します。

設定値により計算を変更するには、まず設定画面での設定を取得する必要がありますが、 これには、SharedPreferencesクラスを使用します。
設定値を取得したら、その設定にあわせて計算処理を変更します。

設定値の取得

設定値の取得には、SharedPreferencesクラスを使用します。
このクラスと、各設定のキーを用いて、設定値を取得していきます。

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
String frac = pref.getString(SettingPrefActivity.PREF_KEY_FRACTION, "500");
Boolean roundup = pref.getBoolean(SettingPrefActivity.PREF_KEY_ROUNDUP, false);

端数は、文字列の設定ですので、getStringメソッドでキーを指定し値を取得します。第二引数の "500" は、設定値がない場合のデフォルト値となります。
切り上げは、ブールの設定ですので、getBooleanメソッドでキーを指定し値を取得します。第二引数の "false" は同様にデフォルト値です。
これで、設定画面で設定した、端数 と 端数切り上げ の設定が取得することができます。

なお、この設定値は、Preferenceの機能で設定画面での設定が変更になると内容が xml ファイルに自動的に保存されます。
保存先は、端末の data/data/パッケージ名/shared_pref フォルダです。
このサンプルアプリの場合、パッケージ名が com.example.splitthecost なので、保存先は
data/data/com.example.splitthecost/shared_pref となります。

計算処理の変更

上記で取得した設定値を元に計算処理を変更します。
端数の単位の処理と、切り上げ処理が追加になります。

計算処理はたいしたことありませんので、これまでに追加した MainActivity.java ファイルをまとめて以下に示します。
設定値の取得と計算の変更部分を確認してください。

package com.example.splitthecost2;

import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.MenuItem;
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);
          
          // 設定を取得
          SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
          String frac = pref.getString(SettingPrefActivity.PREF_KEY_FRACTION, "500");
          Boolean roundup = pref.getBoolean(SettingPrefActivity.PREF_KEY_ROUNDUP, false);
          int fracVal = Integer.parseInt(frac);
          
          // 入力内容を取得
          String strNum   = etxtNum.getText().toString();
          String strMoney = etxtMoney.getText().toString();

          // 数値に変換
          int num     = Integer.parseInt(strNum);
          int money   = Integer.parseInt(strMoney);
          
          // 割り勘計算
          int result = money / num;
          
          // 切り上げ
          if (roundup && result % fracVal != 0) {
            result += fracVal;
          }
          
          // 端数処理
          result = result / fracVal * fracVal;
          
          // 結果表示用テキストに設定
          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;
  }
  
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.action_settings:
      // 設定ボタン押下処理
      Intent intent = new Intent(MainActivity.this, SettingPrefActivity.class);
      startActivity(intent);
      break;
    default:
      break;
    }
    
    return super.onOptionsItemSelected(item);
  }
}

これで、サンプルアプリの改善についての説明は完了です。
次は、Android アプリ開発の実践編として、様々な画面レイアウトパターンの作成等について説明していきます。



次は・・・
Android アプリ開発の、実践編の内容について説明します。
実践編