Mặc dù nó đang được ghi lại bằng cách sử dụng "%s"
, tôi có thể hiển thị giá trị đã chọn dưới dạng tóm tắt, nó không hoạt động như mong đợi.Văn bản tóm tắt của ListPreference không được cập nhật tự động bất cứ khi nào có sự thay đổi trong lựa chọn
http://developer.android.com/reference/android/preference/ListPreference.html#getSummary%28%29
Tôi gặp sau preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/preference_xxx_category">
<CheckBoxPreference
android:title="@string/preference_xxx_mode_title"
android:defaultValue="false"
android:summary="@string/preference_xxx_mode_summary"
android:key="xxxModePreference" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/preference_yyy_category">
<ListPreference
android:title="@string/preference_yyy_mode_title"
android:defaultValue="0"
android:entries="@array/yyy"
android:entryValues="@array/yyy_values"
android:summary="%s"
android:key="yyyModePreference" />
</PreferenceCategory>
</PreferenceScreen>
và đây là tôi arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="yyy">
<item>Display value 0</item>
<item>Display value 1</item>
</string-array>
<string-array name="yyy_values">
<item>0</item>
<item>1</item>
</string-array>
</resources>
Những gì tôi mong đợi bằng cách mã Java sau đây để xây dựng một hoạt động ưu tiên hoàn thành, với hộp kiểm và tùy chọn danh sách, văn bản tóm tắt của tùy chọn danh sách có thể được cập nhật tự động, khi bao giờ tôi thực hiện lựa chọn. Văn bản tóm tắt sẽ chuyển đổi ở giữa Giá trị hiển thị 0 và Giá trị hiển thị 1.
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Tuy nhiên, tôi nhận ra văn bản tóm tắt cho tùy chọn danh sách sẽ không tự động cập nhật. Chỉ khi tôi thực hiện đánh dấu/bỏ chọn vào hộp kiểm, chỉ toàn bộ hoạt động sẽ bị vô hiệu và văn bản tóm tắt cho tùy chọn danh sách sẽ CHỈ được cập nhật.
Do đó, tôi phải sửa đổi mã của mình như sau, trông giống như cồng kềnh.
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onResume() {
super.onResume();
// Cumbersome way to make sure list preference's summary text is being updated.
final String key = "yyyModePreference";
ListPreference listPreference = (ListPreference)findPreference(key);
final String value = PreferenceManager.getDefaultSharedPreferences(this).getString(key, key);
final int index = listPreference.findIndexOfValue(value);
if (index >= 0) {
final String summary = (String)listPreference.getEntries()[index];
listPreference.setSummary(summary);
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences options, String key) {
// Cumbersome way to make sure list preference's summary text is being updated.
if (key.equals("yyyModePreference")) {
ListPreference listPreference = (ListPreference)findPreference(key);
final String value = options.getString(key, key);
final int index = listPreference.findIndexOfValue(value);
if (index >= 0) {
final String summary = (String)listPreference.getEntries()[index];
listPreference.setSummary(summary);
}
}
}
}
Đây có phải là cách chính xác không? Có cách nào đơn giản, để đảm bảo văn bản tóm tắt của ListPreference luôn được cập nhật tự động bất cứ khi nào có thay đổi trong lựa chọn.
Cảm ơn bạn, tôi đã mất nhiều thời gian để tìm hiểu điều này. – Gerhard
bản sao có thể có của [Thay đổi tóm tắt của một ListPreference với giá trị mới (Android)] (http://stackoverflow.com/questions/7017082/change-the-summary-of-a-listpreference-with-the-new- giá trị-android) – CAMOBAP