在摘要中显示 EditTextPreference 当前值
Displaying EditTextPreference current value in summary
我希望能够在摘要字段中显示 EditTextPreference 的值。具体来说,我想在 PreferenceFragmentCompat 中执行此操作。
import android.support.v7.preference.PreferenceFragmentCompat;
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
}
}
首选项文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:defaultValue="DEVICE01"
android:key="device_id"
android:title="Device ID" />
</PreferenceScreen>
我看过其他解决方案,但其中 none 包括如何在 PreferenceFragmentCompat 中执行此操作。
我认为,这与每个简单的 PreferenceFragment 中的方式相同:
在 xml 文件中:
android:summary="@string/your_string_resource"
在代码中:
EditTextPreference editTextPreference = (EditTextPreference) findPreference(YOUR_PREFERENCE_KEY);
editTextPreference.setSummary(sharedPreferences.getString(YOUR_PREFERENCE_KEY, defaultValue));
editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
String yourString = o.toString();
sharedPreferences.edit().putString(YOUR_PREFERENCE_KEY, yourString).apply();
editTextPreference.setSummary(yourString);
return true;
}
});
@grabarz121 的回答让我找到了正确的方向。这是我添加到首选项中的内容:
android:summary="@string/pref_device_id_summary"
这是我modified/added到SettingsFragmentclass:
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
setDeviceIdSummary();
}
public void setDeviceIdSummary() {
final String deviceIdKey = getString(R.string.pref_device_id_key);
String deviceIdDefault = getString(R.string.pref_device_id_default);
String deviceIdValue = sharedPreferences.getString(deviceIdKey, deviceIdDefault);
final EditTextPreference editTextPreference = (EditTextPreference) findPreference(deviceIdKey);
editTextPreference.setSummary(deviceIdValue);
editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
String newValue = o.toString();
sharedPreferences.edit().putString(deviceIdKey, newValue).apply();
editTextPreference.setSummary(newValue);
return true;
}
});
}
由于这个问题在Google上仍然弹出,现在有更直接的方法来解决这个问题(使用androidx)。
<PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:key="prefFoobar"
android:title="@string/preference_foobar"
android:persistent="true"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
"app:useSimpleSummaryProvider" 无所不能。
我希望能够在摘要字段中显示 EditTextPreference 的值。具体来说,我想在 PreferenceFragmentCompat 中执行此操作。
import android.support.v7.preference.PreferenceFragmentCompat;
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
}
}
首选项文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:defaultValue="DEVICE01"
android:key="device_id"
android:title="Device ID" />
</PreferenceScreen>
我看过其他解决方案,但其中 none 包括如何在 PreferenceFragmentCompat 中执行此操作。
我认为,这与每个简单的 PreferenceFragment 中的方式相同: 在 xml 文件中:
android:summary="@string/your_string_resource"
在代码中:
EditTextPreference editTextPreference = (EditTextPreference) findPreference(YOUR_PREFERENCE_KEY);
editTextPreference.setSummary(sharedPreferences.getString(YOUR_PREFERENCE_KEY, defaultValue));
editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
String yourString = o.toString();
sharedPreferences.edit().putString(YOUR_PREFERENCE_KEY, yourString).apply();
editTextPreference.setSummary(yourString);
return true;
}
});
@grabarz121 的回答让我找到了正确的方向。这是我添加到首选项中的内容:
android:summary="@string/pref_device_id_summary"
这是我modified/added到SettingsFragmentclass:
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
setDeviceIdSummary();
}
public void setDeviceIdSummary() {
final String deviceIdKey = getString(R.string.pref_device_id_key);
String deviceIdDefault = getString(R.string.pref_device_id_default);
String deviceIdValue = sharedPreferences.getString(deviceIdKey, deviceIdDefault);
final EditTextPreference editTextPreference = (EditTextPreference) findPreference(deviceIdKey);
editTextPreference.setSummary(deviceIdValue);
editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
String newValue = o.toString();
sharedPreferences.edit().putString(deviceIdKey, newValue).apply();
editTextPreference.setSummary(newValue);
return true;
}
});
}
由于这个问题在Google上仍然弹出,现在有更直接的方法来解决这个问题(使用androidx)。
<PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:key="prefFoobar"
android:title="@string/preference_foobar"
android:persistent="true"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
"app:useSimpleSummaryProvider" 无所不能。