我試圖阻止用戶輸入一個空字符串轉換爲EditTextPreference
(在本例中,catName
)沒有更新。我用一個OnPreferenceChangeListener
當變化到EditTextPreference
做檢測,如果有變化和字符串是空白,我用EditTextPreference.setText()
命令重置舊值。但是,如果我在GUI中重新打開EditTextPreference
(該字符串爲空),則新值不會正確顯示,如果我回到主應用程序,我可以驗證是否將空白值保存到首選項。EditTextPreference.setText(值)如預期
我驗證過if語句按預期執行,並如預期我的舊名稱(oldCatName
)的參數保持跟蹤正在更新。我甚至可以在setOnPreferenceChangeListener
執行完畢之前登錄的catName.getText()
值正確的,我總能看到我所期望的價值(由用戶設定的新的價值,當他們進入一個空白的值,它正確地重置舊值)。我不知道爲什麼將值設置爲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;
}
});
}
}
感謝您的幫助! -Michael
編輯:澄清。 if語句中的邏輯正確執行。 EditTextPreference
的字符串值甚至可以正確更新。但是,如果用戶再次點擊EditTextPreference
,GUI中的值不會正確更新,並且應用程序共享首選項中的值不會正確更新。它保持空白。
如果(value.equals( 「」)|| value.equals(空)) –
我給它一個嘗試,但遺憾的是沒有運氣。我相當確信這個問題不在意外執行的if語句中,而是用我的方法來編輯值。 –
什麼是'newVal'?它是「EditText」嗎? –