1

我正在从用户那里获取 IP、端口和设备名称设置,并在初始化对象时使用它们。但是,当我进行设置时,这些设置不会在应用程序中更新,直到我重新启动应用程序。

这是我的设置文件-

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


        addPreferencesFromResource(R.layout.settings);

        SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
        EditTextPreference editTextPrefLAN = (EditTextPreference) findPreference("prefABCLan");
        editTextPrefLAN
                .setSummary(sp.getString("prefABCLan", "Set your LAN IP"));





        EditTextPreference editTextPrefPort = (EditTextPreference) findPreference("prefABCPort");
        editTextPrefPort
                .setSummary(sp.getString("prefABCPort", "Set your port"));
        EditTextPreference editTextPrefDeviceName = (EditTextPreference) findPreference("prefABCDeviceName");
        editTextPrefDeviceName
                .setSummary(sp.getString("prefABCDeviceName", "Set your device name"));

        /*EditTextPreference editTextPrefScopeIP = (EditTextPreference) findPreference("prefScopeIP");
        editTextPrefScopeIP
                .setSummary(sp.getString("prefScopeIP", "Set your Scope IP"));
        EditTextPreference editTextPrefScopeLogin = (EditTextPreference) findPreference("prefScopeLogin");

*/


    }

    protected void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
    }

    protected void onStop() {
        super.onStop();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
    }

    protected void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.actionbar, menu);

        return true;
    }

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

我的代码中有什么需要做的吗?

4

1 回答 1

1

当用户在 a 中修改首选项时PreferenceActivity,您仍然需要在应用程序的其他地方做一些事情来使用这些首选项。如果您之前阅读了首选项,并且现在需要更改的值,则尤其如此。

一种方法是重新加载首选项,通过将您的首选项读取逻辑放入生命周期方法中,这样onResume()将在创建活动/片段时以及在用户访问PreferenceActivity.

另一种方法是OnSharedPreferenceChangeListener在其他组件中使用 ,就像您在此处使用它一样。关心偏好变化的活动(或片段或其他)将注册OnSharedPreferenceChangeListener并观察相关变化。

于 2013-10-07T23:43:32.833 回答