更新Post SyncTask上的EditTextPreference摘要

时间:2017-01-07 12:55:29

标签: java android sharedpreferences

在我的应用程序中,一旦用户提供三个输入,AsyncTask启动连接到服务器并获取另外两个字段的信息。完成AsyncTask后,我想在打开的设置页面中设置这两个接收的值。

我搜索并尝试了此代码,但没有更新已从服务器获取值的字段的摘要。

问题是我无法将从服务器收到的值设置为EditTextPreference的摘要。如果我重新打开设置页面,它会显示值而不是重新打开。

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    updatePreference(key);
}

private void updatePreference(String key) {
    if (key.equals("id")) {
        Preference preference = findPreference(key);
        if (preference instanceof EditTextPreference) {
            EditTextPreference editTextPreference = (EditTextPreference) preference;
            if (editTextPreference.getText().trim().length() > 0) {
                editTextPreference.setSummary(editTextPreference.getText());   
            } else {
                editTextPreference.setSummary("");
            }
        }

    } else if (key.equals("sclass")) {
        Preference preference = findPreference(key);
        if (preference instanceof EditTextPreference) {
            EditTextPreference editTextPreference = (EditTextPreference) preference;
            if (editTextPreference.getText().trim().length() > 0) {
                editTextPreference.setSummary(editTextPreference.getText());
                                    } else {
                editTextPreference.setSummary("");
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

创建一个监听器并在onCreate

中调用它
sharedPrefYourObj.registerOnSharedPreferenceChangeListener(t‌​his);

尝试注册您的监听器onResume并取消注册onPause,而不是onCreate

示例:

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

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