我已经回过头来了,我只是无法理解。我正在使用首选项 fragment 进行设置。我可以更改设置,甚至可以在进行更改时获取“摘要”以进行更新。但是,如果我离开设置屏幕并返回到该屏幕,则摘要将恢复为默认文本。所以问题是,当使用edittext首选项时。您如何更新摘要,以显示用户将设置更改为哪些内容,并使其在关闭屏幕和应用程序时始终存在?在这种情况下,当我的用户更改mse_ip时,摘要将更改为“MSE IP x.x.x.x”,但是一旦我离开设置屏幕并返回,它又返回到“0.0.0.0”,这是@ string/mseip设置的位置。
preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:key="mse_ip"
android:title="MSE IP"
android:summary="@string/mseip"
android:defaultValue="0.0.0.0"
android:dialogTitle="IP Address for mse" />
<EditTextPreference
android:key="mse_username"
android:title="Username"
android:summary="MSE Username %s"
android:defaultValue="Admin"
android:dialogTitle="Username for mse" />
<EditTextPreference
android:key="mse_password"
android:title="MSE Password"
android:password="true"
android:summary="******"
android:defaultValue="Admin"
android:dialogTitle="Password for mse" />
</PreferenceScreen>
偏好 fragment
package com.hmkcode.android;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
/*public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
} */
public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
// set texts correctly
onSharedPreferenceChanged(null, "");
}
@Override
public void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updatePreference(key); }
private void updatePreference(String key){
if (key.equals("mse_ip")){
Preference preference = findPreference(key);
if (preference instanceof EditTextPreference){
EditTextPreference editTextPreference = (EditTextPreference)preference;
if (editTextPreference.getText().trim().length() > 0){
editTextPreference.setSummary("MSE IP " + editTextPreference.getText());
}else{
editTextPreference.setSummary("MSE IP Not");
}
}
}
}
}
setpreferenceactivity
import android.os.Bundle;
import android.app.Activity;
public class SetPreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PrefsFragment()).commit();
//setContentView(R.layout.activity_set_preference);
}
}
最佳答案
您必须将OnPreferenceChangeListener设置为您的首选项。很快
每次首选项更改时,调用setSummary都会更改摘要显示。这可能是
示例代码:
final Preference pref = getPreferenceManager().findPreference(
PREF_KEY);
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
pref.setSummary(newValue.toString());
return true;
}
});
您还应该在onCreate()中调用首选项的setSummary方法,
以便摘要显示您的sharedPreference值。
关于android - 如何设置edittext首选项摘要并保持不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22651653/