サンプル作成 (2)

だんだんとこ向けのサンプルなんだかワケワカらなくなってきつつあります。とりあえず設定な Activity から云々なパーツはプロトタイプができたカンジ。Preferences 関連、というか Android まわりって基本的に d.android.com のリファレンス見れ、がデフォらしいのは分かりました。
プロトタイプは別途 github 方面にもつっこむ方向なんですが、とりあえず以下にコードを晒しつつ補足を。
とりあえず PreferenceActivity で、だったんですが deplicated なソレが多くて困りました。PreferenceActivity#addPreferencesFromResource が、というソレの解決がいっちゃん最後だった記憶あり。
onPostCreate で Fragment を云々してます。

public class ShakePreferences extends PreferenceActivity {
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new GeneralPreferenceFragment())
                .commit();
    }

上記の Fragment をハメる処理ですが、d.android.com に例示されてたナニをそのまんま使わせて頂いております。
以降は Fragment の定義になっています。

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public static class GeneralPreferenceFragment extends PreferenceFragment 
        implements OnSharedPreferenceChangeListener {
        private String TAG = "GeneralPreferenceFragment";
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref_general);
        }

Fragment の onCreate で addPreferencesFromResource を呼び出してます。あと、OnSharedPreferenceChangeListener インターフェース実装してます。
実装メソド定義が以下。

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                String key) {
            Log.d(TAG, "onSharedPreferenceChanged");
            if (key.equals(getText(R.string.pref_key_social_recommendations))) {
                Log.d(TAG, "settings changed");
                CheckBoxPreference tmp = (CheckBoxPreference) findPreference(key);
                Log.d(TAG, "tmp.isChecked() is " + tmp.isChecked());
                Context ctx = (Context)GeneralPreferenceFragment.this.getActivity();
                
                if (tmp.isChecked()) {
                    Log.d(TAG, "startService");
                    ctx.startService(new Intent(ctx, ShakeWatchService.class));
                } else {
                    Log.d(TAG, "stopService");
                    ctx.stopService(new Intent(ctx, ShakeWatchService.class));
                }
            }
        }

チェック契機でサービスの起動終了のみ。Service 側の実装はガワだけなので略します。

とりあえず

MVP なナニになったら github 方面に登録の方向