动态更改Custom PreferenceScreen的数据
我正在使用自定义PreferenceScreen
,我使用PreferenceActivity
为设置页面创建了自定义屏幕。
以下是我的首选项屏幕。
问题: -我需要更改动态下载数据的徽章。 我遵循这个问题来实现这种布局。 我已经尝试了所有关于这个问题的答案,但没有解决单个答案。
有没有其他方法可以查找哪些内部偏好?
的settings.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference android:title="@string/settings_user_profile" android:key="user_profile" android:summary="@string/settings_user_profile_desc" android:layout="@layout/setting_list"></Preference>
<Preference android:title="@string/settings_download" android:key="download_data" android:summary="@string/settings_download_desc" android:layout="@layout/setting_list"></Preference>
</PreferenceScreen>
您可以onBindDialogView()
子类Preference
,覆盖onBindDialogView()
- 只需记住将<Preference...>
的XML更改为包含您的包和类<com.example.app.BadgedPreference...>
:
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
Log.v( "onBindDialogView()", v.getClass().getSimpleName() );
}
如果您的BadgedPreference
具有处理您的更改的方法,则可以更轻松地使用它 - 从您的PreferenceActivity
:
PreferenceScreen myPrefScreen = (PreferenceScreen)getPreferenceScreen();
BadgedPreference bp = (BadgedPreference)myPrefScreen.findPreference("download_data");
// Custom method
bp.setBadgeValue(12);
更简单地说,您可以使用标准Preference
,只需将摘要字段设置为“徽章”即可,然后您可以使用包含的摘要字段设置值:
Preference pref = (Preference)myPrefScreen.findPreference("download_data");
pref.setSummary("12");
如果您有任何问题,请告诉我。
你可以实现OnSharedPreferenceChangeListener
像这样:
@Override
public void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
//update summary
updatePrefsSummary(sharedPreferences, findPreference(key));
}
如果您使用标准偏好,您可以尝试如下所示:
/**
* Update summary
*
* @param sharedPreferences
* @param pref
*/
protected void updatePrefsSummary(SharedPreferences sharedPreferences,
Preference pref) {
if (pref == null)
return;
if (pref instanceof ListPreference) {
// List Preference
ListPreference listPref = (ListPreference) pref;
listPref.setSummary(listPref.getEntry());
} else if (pref instanceof EditTextPreference) {
// EditPreference
EditTextPreference editTextPref = (EditTextPreference) pref;
editTextPref.setSummary(editTextPref.getText());
} else if (pref instanceof MultiSelectListPreference) {
// MultiSelectList Preference
MultiSelectListPreference mlistPref = (MultiSelectListPreference) pref;
String summaryMListPref = "";
String and = "";
// Retrieve values
Set<String> values = mlistPref.getValues();
for (String value : values) {
// For each value retrieve index
int index = mlistPref.findIndexOfValue(value);
// Retrieve entry from index
CharSequence mEntry = index >= 0
&& mlistPref.getEntries() != null ? mlistPref
.getEntries()[index] : null;
if (mEntry != null) {
// add summary
summaryMListPref = summaryMListPref + and + mEntry;
and = ";";
}
}
// set summary
mlistPref.setSummary(summaryMListPref);
} else if (pref instanceof RingtonePreference) {
// RingtonePreference
RingtonePreference rtPref = (RingtonePreference) pref;
String uri;
if (rtPref != null) {
uri = sharedPreferences.getString(rtPref.getKey(), null);
if (uri != null) {
Ringtone ringtone = RingtoneManager.getRingtone(
getActivity(), Uri.parse(uri));
pref.setSummary(ringtone.getTitle(getActivity()));
}
}
}
}
如果使用自定义首选项,则可以执行所有操作,并且可以覆盖setSummary(int值)
@Override
public void setSummary(int value) {
setSummary(String.valueOf(value)+" ...." );
}
链接地址: http://www.djcxy.com/p/71013.html