Android 如何设置edittext首选项摘要并使其保持不变

Android 如何设置edittext首选项摘要并使其保持不变,android,android-edittext,preference,summary,Android,Android Edittext,Preference,Summary,在这件事上,我已经倒数第四了,我就是搞不懂。我正在使用首选项片段设置设置。我可以让设置生效,甚至可以在进行更改时更新“摘要”。但是,如果我离开设置屏幕并返回,则摘要将返回默认文本。所以问题是,当使用edittext首选项时。如何更新摘要以显示用户更改设置的内容,并使其在关闭屏幕和应用程序时保持不变?在这种情况下,当我的用户更改mse_ip时,摘要将更改为“mse ip x.x.x.x”,但当我离开设置屏幕并返回时,它将返回到@string/mseip设置为的“0.0.0.0” preferenc

在这件事上,我已经倒数第四了,我就是搞不懂。我正在使用首选项片段设置设置。我可以让设置生效,甚至可以在进行更改时更新“摘要”。但是,如果我离开设置屏幕并返回,则摘要将返回默认文本。所以问题是,当使用edittext首选项时。如何更新摘要以显示用户更改设置的内容,并使其在关闭屏幕和应用程序时保持不变?在这种情况下,当我的用户更改mse_ip时,摘要将更改为“mse ip x.x.x.x”,但当我离开设置屏幕并返回时,它将返回到@string/mseip设置为的“0.0.0.0”

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>
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);
}
 }

看起来您只是更新了EditText的值。通过调用

SharedReferences.edit().putString(key,editTextPreference.getText()).apply()


这可以在
更新引用(字符串键)
函数中调用。

您必须将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方法, 因此,该摘要显示您的SharedReference值

通过使用(请参见),添加以下属性就足够了:

<EditTextPreference
    ...
    app:useSimpleSummaryProvider="true" />

很有趣。不幸的是,它不是包含%$1s的字符串文本。
<EditTextPreference
    ...
    app:useSimpleSummaryProvider="true" />