晚上好,
使用java 1.7我试图使用类似于以下代码段的代码覆盖FieldEditorPreferencePage的String firstChar = "" + answer.charAt(0);
if(firstChar.equalsIgnoreCase("y")){
....
}
else if(firstChar.equalsIgnoreCase("n")){
....
}
方法。 (附加代码没有区别,只有这一种方法)
performApply()
基本上我想更新@Override
public void performApply() {
scopedPreferenceStore.setDefault(PREF_KEY, value);
super.performApply();
}
的默认首选项值,因此当用户在应用更改后点击恢复默认值时,它会使用新值而不是旧值。
问题在于,如果我这样做,当我重新运行程序时,新的默认值不会被存储。如果我放弃使用PREF_KEY
,则会存储新的默认值。
进一步澄清
使用setDefault()
:
如果我将首选项A更改为100,请单击“应用”,将首选项A更改为25,然后单击“恢复默认值”,我将看到100.如果我重新启动程序并查看首选项A,我会看到50。
不使用set default:
如果我将首选项A更改为100,请单击“应用”,然后单击“恢复默认值”,我将看到50.但如果我将其更改回100,请单击“应用”,然后重新启动我的程序并查看首选项AI见100。
是什么导致了这种行为以及如何绕过它?
注意:我正在使用首选项初始化程序,但是我希望动态地将默认值更改为上次应用的用户输入,而不会出现上面提到的奇怪行为。
答案 0 :(得分:1)
要设置首选项默认值,您应使用initializer
扩展点的org.eclipse.core.runtime.preferences
元素来定义“首选项”初始化程序'类。不要在字段编辑器或其他任何地方尝试覆盖它。
<extension point="org.eclipse.core.runtime.preferences">
<initializer class="com.example.MyPreferenceInitializer"/>
</extension>
public class MyPreferenceInitializer extends AbstractPreferenceInitializer
{
@Override
public void initializeDefaultPreferences()
{
IPreferenceStore prefs = Activator.getDefault().getPreferenceStore();
prefs.setDefault(PREF_KEY, VALUE);
}
}