我试图阻止用户将空字符串输入EditTextPreference
(在示例中catName
)。我使用 aOnPreferenceChangeListener
来检测何时对 进行更改EditTextPreference
,如果有更改并且字符串为空白,我使用EditTextPreference.setText()
命令重置为旧值。但是,如果我在 GUI 中重新打开(字符串为空白),新值不会正确显示EditTextPreference
,并且如果我返回主应用程序,我可以验证是否将空白值保存到首选项中。
我已验证 if 语句按预期执行,并且跟踪旧名称 ( oldCatName
) 的参数按预期更新。我什至可以catName.getText()
在完成执行之前记录该值,setOnPreferenceChangeListener
并且我总是看到我期望的值(用户设置的新值,当他们输入空白值时,它会正确重置为旧值)。我不确定为什么将值设置EditTextPreference
为不会将值保存到首选项文件或更新 GUI。
public class SettingsActivity extends PreferenceActivity {
private String oldCatName;
private EditTextPreference catName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
catName = (EditTextPreference) findPreference("cat_name");
oldCatName = catName.getText();
catName.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final String value = (String) newVal;
if (value.equals("")) {
catName.setText(oldCatName);
Log.e("new value", catName.getText());
}
else
oldCatName = value;
return true;
}
});
}
}
谢谢您的帮助!-迈克尔
编辑:澄清。if 语句中的逻辑正在正确执行。的字符串值EditTextPreference
甚至可以正确更新。但是,如果用户再次点击,GUI 中的值EditTextPreference
不会正确更新,并且应用程序的共享首选项中的值也不会正确更新。它保持空白。