我有一个数字,EditTextPreference
其中必须是数字 0-9。我可以阻止其他字符但不能退格。Backspace + Okay = 一个空值。空值意味着当它被检索并解析为一个数字时,它将崩溃。
目前,我检查首选项何时更改,是否具有某些键且没有长度,如果是,则使用“0”重新保存。有没有更简单的内置方法来做到这一点?“需要值”属性,或者至少是更自动的东西,比如能够获得digits
更改后的偏好?(如果数字是“0123456789”,那么它不能为空)。
到目前为止,在我的设置活动中:
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
//Prevent EditText from being non number
String type = this.findPreference(key).getClass().getSimpleName();
if( type.equals("EditTextPreference")
//Put key of any allowed to be blank here...
&& prefs.getString(key, "0").length()==0 ){
this.findPreference(key).setSummary("0");
SharedPreferences.Editor prefedit = prefs.edit();
prefedit.putString(key, "0");
prefedit.commit();
}
updateSummaries();
}
(设置摘要不起作用--^。能够检查android:digits="0123456789"
属性就可以了,所以我不需要放置任何应该为空白的键。)
或者在主要活动中,我可以将所有数字首选项放入字符串中,检查字符串,如果不好则将其设置为 0,然后解析每个字符串。随着我使用它们中的更多,这感觉不那么吸引人,而不是自动的。
String sTT = prefs.getString("mykey", "0");
>> x10
if(sTT.length()==0){ sTT="0"; }
>> x10
tt = Long.parseLong( sTT );
>> x10, different types
(这可能仍然是最好的方法......?)