我想在摘要标签的首选项屏幕中显示当前选定的值。
对于 ListPreference ,我在
中使用了 getEntry 方法public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
方法,我的课程是:
public class AlarmPropertiesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
对于 EditTextPreference ,我使用 getText 方法
我尝试获取 RingtonePreference 的默认值,但我没有找到任何get方法。
有人帮帮我吗?
BR Kolesar
答案 0 :(得分: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));
}
答案 1 :(得分: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会显示它。