Java 更新同步后任务的EditTextPreference摘要

Java 更新同步后任务的EditTextPreference摘要,java,android,sharedpreferences,Java,Android,Sharedpreferences,在我的应用程序中,一旦用户提供三个输入,AsyncTask启动,它将连接到服务器并获取另外两个字段的信息。一旦AsyncTask完成,我想在打开的设置页面中设置这两个接收到的值 我搜索并尝试了这段代码,但并没有更新从服务器获取值的字段的摘要 问题是我无法将从服务器接收的值作为摘要设置为EditTextPreference。如果我重新打开settngs页面,它会显示值而不是不重新打开 @Override public void onSharedPreferenceChanged(SharedPre

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

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

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

@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("");
            }
        }
    }
}

创建一个侦听器并在
onCreate中调用它

sharedPrefYourObj.registerOnSharedPreferenceChangeListener(t‌​his);
尝试在Resume上注册您的侦听器,并在Pause上取消注册,而不是在Create上取消注册

例如:

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

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

创建一个侦听器并在
onCreate中调用它

sharedPrefYourObj.registerOnSharedPreferenceChangeListener(t‌​his);
尝试在Resume上注册您的侦听器,并在Pause上取消注册,而不是在Create上取消注册

例如:

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

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


你的意思是,如果你关闭应用程序并重新打开,它会得到更新吗?如果我重新打开设置页,它会在edittextpreference中得到更新的摘要。所以你想在不重新打开的情况下显示更改吗?是吗?是的,我想更新摘要以便用户可以看到结果。有可能吗?如果我的答案对你不起作用,当然可以告诉我你的侦听器在哪里。你的意思是,如果你关闭应用程序并重新打开,它会得到更新吗?如果我重新打开设置页面,它会在edittextpreference中得到更新的摘要。所以你想在不重新打开的情况下显示更改吗?是吗?是的,我想更新摘要以便用户可以看到结果。有可能吗?当然,如果我的答案对你不适用,请告诉我你的听众在哪里。我按照你的指导申请了听众,简历上已经有了,但我根据你的建议增加了暂停以取消注册。解决方案无效。@Panache您的onCreatepublic类FinalSettings extends PreferenceActivity中是否有侦听器实现SharedPreferences.OnSharedPreferenceChangeListener{我还需要在创建时添加它吗?@Panache您仅以这种方式实现方法。.您需要侦听更改。.在您的oncreate中添加一个类似这样的侦听器,请参见
SharedReferences SharedReferences=getPreferenceScreen().GetSharedReferences();SharedReferences.RegisterOnSharedReferenceChangeListener(此);
我按照您的指导应用了侦听器,它已经在简历中,但我按照您的建议添加了暂停以取消注册。解决方案无效。@Panache您的onCreatepublic类FinalSettings Extendes PreferenceActivity实现了SharedReferences.OnSharedPreferenceChangeListener中是否有侦听器{我还需要在创建时添加它吗?@Panache您只需要以这种方式实现方法。.您需要侦听更改。.在您的oncreate中添加一个类似这样的侦听器,请参见
SharedReferences SharedReferences=getPreferenceScreen().GetSharedReferences();SharedReference.RegisterOnSharedReferenceChangeListener(this);