当EditTextPreference更改时如何显示新值

3

我在我的PreferenceActivity中有两个PreferenceActivity

我的问题是,当我更新一个项目时,新值没有反映在屏幕上。

public class HostSettingActivity extends PreferenceActivity {

    private final String MY_DEBUG_TAG = "SettingActivity";
    SharedPreferences sharedPrefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(MY_DEBUG_TAG, "HostSettingActivity Started");
        super.onCreate(savedInstanceState);
        sharedPrefs = getPreferenceManager().getSharedPreferences(); 
        setPreferenceScreen(createPreferenceHierarchy());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(MY_DEBUG_TAG, "On Destroy");
    }

    private PreferenceScreen createPreferenceHierarchy() {

        // Root
        PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);


        PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
        dialogBasedPrefCat.setTitle("Host Settings");
        root.addPreference(dialogBasedPrefCat);

        EditTextPreference hostPreference = new EditTextPreference(this);
        hostPreference.setKey("host");
        hostPreference.setDialogTitle("Host");
        hostPreference.setDefaultValue("http://example.com");
        hostPreference.setSummary("Set host");
        dialogBasedPrefCat.addPreference(hostPreference);

        EditTextPreference portPreference = new EditTextPreference(this);
        portPreference.setKey("port");
        portPreference.setDialogTitle("Port");
        portPreference.setDefaultValue("8080");
        portPreference.setSummary("Set port");
        dialogBasedPrefCat.addPreference(portPreference);

        hostPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                EditTextPreference etp = (EditTextPreference) preference;
                String newHostValue = newValue.toString();
                Log.i(MY_DEBUG_TAG, "New Host: "+newHostValue);
                etp.setText(newHostValue);
                return true;
            }
        });
        return root;
    }

}
2个回答

4

调用

preference.notifyChanged();

当数据发生变化且需要重新绘制时。

终于!!我以为这将结束我长达2小时的痛苦!!但是发现偏好设置上不再有一个叫做notifyChanged()的方法了!!:(!!我只看到notifyDependencyChange()。 - Anand Rockzz
这是一个受保护的方法。 - WindRider
受保护的方法可以从子类中调用。 - Pointer Null

1

我很困惑setTextsetTitle之间的区别。

        public boolean onPreferenceChange(Preference preference, Object newValue) {
            EditTextPreference etp = (EditTextPreference) preference;
            String newHostValue = newValue.toString();
            Log.i(MY_DEBUG_TAG, "New Host: "+newHostValue);
            etp.setTitle(newHostValue);
            return true;
        }

已经实现了我想要的功能


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接