Androidアプリの書き方思い出し(2)

設定データの保存/読み出し

SharedPreferencesを使う。
おなじみのキーバリューストア方式である。

// 保存
SharedPreferences pref = getSharedPreferences("Hoge",MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("Key1", "Piyo");
editor.putInt("Key2", 123);
editor.commit(); // commit()だとファイルIOが同期待ち。apply()だと非同期。

// メソッドチェーンして1行で書いてもよい
pref.edit().putString("Key1", "Piyo").commit();
// 読み出し
SharedPreferences pref = getSharedPreferences("Hoge",MODE_PRIVATE);
// 第2引数は何も入っていないときの初期値
String piyo = pref.getString("Key1", "Foo");
int fuga = pref.getInt("Key2", 456 );

画面遷移時に引数を渡す

Intentにキーバリューストア方式で種々のデータを持たせる。

// 呼び出し元
Intent intent = new Intent(getApplication(), HogeActivity.class);
intent.putExtra(“Key1”, "Piyo");
intent.putExtra(“Key2”, 123);
startActivity(intent);
// 呼び出し先
Intent intent = getIntent();
String Piyo = intent.getStringExtra(“Key1”);
int fuga = intent.getIntExtra(“Key2”, 456);

元画面に戻るときに戻り値を返す

startActivityのかわりにstartActivityForResultを使う。
第2引数の要求コードは任意の定数を与える。

private static final int REQUEST_CODE = 1; // 任意の定数

Intent intent = new Intent(getApplication(), HogeActivity.class);
startActivityForResult(intent, REQUEST_CODE);

呼び出し先Activity で Intentに種々のデータを持たせる。
setResultで結果コード(OKかキャンセルかなど)とIntentを設定して、finishする。

Intent intent = new Intent();
intent.putExtra("Key1", "Piyo");
setResult(RESULT_OK, intent);
finish();

呼び出し元Activity で onActivityResult が呼ばれる。
第1引数の要求コードで、どの呼び出しからの戻り値か判別できる。
第2引数の結果コードで、OKかキャンセルかなどが判別できる。
第3引数のIntentから種々のデータを取り出せる。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    // 要求コードごとの処理
    switch(requestCode){ 
        case(REQUEST_CODE):
            // 結果コードごとの処理
            if(resultCode == RESULT_OK){
                String piyo = data.getStringExtra("Key1");
            }else if(resultCode == RESULT_CANCELED){
                ;
            }else{
                ;
            }
            break;
        default:
            break;
    }
}