java - 如何在android中更新首选项摘要

标签 java android sharedpreferences android-preferences android-settings

在我的应用程序的设置页面中,有两个 EditTextPreference (s) 当我更改值时,必须更新摘要。现在,只要我在 EditTextPreference (s) 中输入值并点击确定,它就会更新摘要。但是当我重新启动应用程序时,摘要会变回默认值。但是新值保留在 EditTextPreference 中(我打开它时可以看到)。当我在 EditTextPreference 中输入新值时,摘要会再次更新。 如何使摘要每次都根据用户输入进行更新?

这是我的代码:

SettingActivity.java

public class SettingsActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Display the fragment as the main content.
    getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new SettingsFragment()).commit();

    setTitle("Settings");
    ActionBar actionBar=getSupportActionBar();
    // Show the Up button in the action bar.
    actionBar.setDisplayHomeAsUpEnabled(true);
}



public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.settings_layout);
        setHasOptionsMenu(true);

    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);

    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);

    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Preference pref = findPreference(key);
        if (pref instanceof EditTextPreference) {
            EditTextPreference listPref = (EditTextPreference) pref;
            pref.setSummary(listPref.getText());
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            startActivity(new Intent(getActivity(), HomeActivity.class));
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
}

settings_layout.xml

 <EditTextPreference
        android:capitalize="words"
        android:dependency="email_switch"
        android:defaultValue="@string/default_email_address"
        android:key="example_text"
        android:summary="@string/pref_description_email"
        android:maxLines="1"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="@string/pref_email_address_text_title"
        android:inputType="textWebEmailAddress" />
 <EditTextPreference
        android:capitalize="words"
        android:dependency="sms_switch"
        android:defaultValue="@string/default_mobile_number"
        android:key="example_text1"
        android:summary="@string/pref_description_sms"
        android:maxLines="1"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="@string/pref_mobile_number_text_title"
        android:inputType="phone"/>

附言我在我的 MAIN Activity 中调用它

PreferenceManager.setDefaultValues(this, R.xml.settings_layout, false);

最佳答案

SettingsFragment 类的 onCreate() 方法中,您需要获取对 SharedPreferences 的引用,然后运行 ​​onSharedPreferenceChanged() 方法。您的 onCreate() 应该如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.settings_layout);
    setHasOptionsMenu(true);

    //if you are using default SharedPreferences
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());

    onSharedPreferenceChanged(sharedPrefs, getString(R.string.key1));
    onSharedPreferenceChanged(sharedPrefs, getString(R.string.key2));

}

key1key2 是您的偏好键(example_textexample_text1 保存到您的字符串 文件。我在没有字符串引用的情况下自己执行此操作时遇到了问题,这就是我建议提取它们的原因。

关于java - 如何在android中更新首选项摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41481627/

相关文章:

android - 带有异步任务android的DoInBackground错误

android - 使用签名的 keystore 反编译 apk

android - 远程服务和偏好 Activity

java - 部署后的 WAR 版本

Java GridBagLayout 正在调整其自身之外的对象的大小

java - 快速查找数组中元素的数量

android - 底部带有文本叠加的圆形 Avatar ImageView

android - 服务类中的 SharedPreferences 不起作用(空指针)

java - 清除共享首选项

java - 有人知道 Jasypt(Java 加密库)吗?