0

Preferenceクラスを使用すると、インテントを設定して、クリックしたときに設定で別のアクティビティをアクティブにすることができますが、このメソッドを使用してアクティビティの結果を処理する方法を見つけることができません。カスタムビューを提供できるDialogPreferenceもありますが、使用したいビューに直接アクセスすることはできず、アクティビティのみにアクセスできます。

もう少し掘り下げてみると、RingtonePreferenceはPreferenceManagerのいくつかのパッケージ内部メソッドを使用して、開始されたサブアクティビティから結果を受け取るように見えますが、これらはパッケージ内部であるため、同じことを行うことはできません。

結果を返すアクティビティでカスタム設定を処理する他の方法はありますか(結果は設定の値として保存されます)?

4

1 に答える 1

2

また、PreferenceActivityがonActivityResultを返さないことにも気づきました。そうは言っても、SubActivityが設定を直接保存できなかった理由はありますか?その値を確認する必要がある場合は、回避策として、PreferenceActivityのonResumeで確認できます。

//SubActivity onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btn = (Button) findViewById(R.id.Button01);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SharedPreferences prefs = getSharedPreferences(TestPreferenceActivity.PREFS_FILE, MODE_WORLD_READABLE);
            prefs.edit().putString("mykey", "someValue").commit();
            finish();
        }});
}

//PreferenceActivity onResume
@Override
protected void onResume() {
    Log.d(TAG, "Preferences Resumed");
    //Check for new Preference Values
    SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_WORLD_READABLE);
    String value = prefs.getString("mykey", "defValue");
    Log.d(TAG, "Current value is: " + value);
    super.onResume();
}
于 2010-12-05T23:21:40.520 に答える