3

現在選択されている値を設定画面のサマリーラベルに表示したい。

ListPreferenceの場合、 getEntryメソッドを使用しました

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

メソッド、私のクラスは次のとおりです。

public class AlarmPropertiesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener

EditTextPreferenceには、 getTextメソッドを使用しました

RingtonePreferenceのデフォルト値を取得しようとしましたが、そのためのgetメソッドが見つかりませんでした。

誰か助けてくれますか?

BRコレサール

4

2 に答える 2

8

これは私のために働きます;-)

if (pref instanceof RingtonePreference) {

            Log.i("***", "RingtonePreference " + pref.getKey());
            final RingtonePreference ringPref = (RingtonePreference) pref;
            ringPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference,
                        Object newValue) {
                    Log.i("***", "Changed " + newValue.toString());
                    Ringtone ringtone = RingtoneManager.getRingtone(
                            SettingsActivity.this, Uri.parse((String) newValue));
                    ringPref.setSummary(ringtone.getTitle(SettingsActivity.this));
                    return true;
                }
            });
            String ringtonePath=pref.getSharedPreferences().getString(pref.getKey(), "defValue");
            Ringtone ringtone = RingtoneManager.getRingtone(
                    SettingsActivity.this, Uri.parse((String) ringtonePath));
            ringPref.setSummary(ringtone.getTitle(SettingsActivity.this));

        }
于 2012-12-05T21:34:06.993 に答える
2

私も同じ問題を抱えてる。SharedPreferences 値を調べようとしましたが、残念ながら uri は名前付きファイルのような ID につながります。

private void updateSummary(Preference p, SharedPreferences sharedPrefs) {
    if (p instanceof ListPreference) {

        ListPreference listPref = (ListPreference) p;
        p.setSummary(listPref.getEntry());

    } else if (p instanceof RingtonePreference) {

        /* 
         * This is kind of a longshot, since we are not able to get the entry directly and
         * so we have to go the route via the shared preferences.
         */

        RingtonePreference ringPref = (RingtonePreference) p;
        String ringtoneKey = ringPref.getKey();
        String ringtonePath = sharedPrefs.getString(ringtoneKey, "");
        ringPref.setSummary(ringtonePath);

    }
}

パスは次のようなものです: content://media/internal/audio/media/25

したがって、これは適切な解決策ではありません。しかし、たとえば GoogleTalk アプリでは、選択した通知音も表示されないことに気付きました。一方、GoogleMailはそれを示しています。

于 2012-05-15T14:20:58.450 に答える