我想验证 EditTextPreference
值是否在特定的 int
范围内(比如说 1 到 22)。我唯一可以验证的部分是 inputType
(仅限数字)以及 prefs.xml 文件中的以下 xml 声明。
android:inputType="number"
我做的第二件事是在 ListSettings
Activity 中编写以下代码。
public class ListSettings extends PreferenceActivity implements OnSharedPreferenceChangeListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.registerOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
String value = sp.getString(key, null);
int intZoomValue = Integer.parseInt(value);
if (intZoomValue < 1 || intZoomValue > 22) {
Intent intent = new Intent().setClass(this, dialog.class);
// I want to call the dialog activity here...
}
}
dialog.class 如下:
public class dialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Please enter a value between 1-22!");
builder.setCancelable(true);
AlertDialog alert = builder.create();
alert.show();
}
}
我想要实现的是每当用户输入不在 1-22 范围内的值时调用 dialog.class
(警报对话框)。
我真的不明白如何用正确的方式进行验证。
最佳答案
这就是我所做的:
EditTextPreference pref = (EditTextPreference) findPreference(this.getString(R.string.my_setting_key));
pref.getEditText().setFilters(new InputFilter[]{
new InputFilter (){
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
int input = Integer.parseInt(dest.toString() + source.toString());
if (input<MAX_VALUE && input >0)
return null;
} catch (NumberFormatException nfe) { }
return "";
}
}
});
因此,技巧是您可以使用以下方法从 EditTextPreference 获取 EditText:
pref.getEditText()
然后就可以设置过滤器了。当一切正常时,过滤器应返回 null;当用户输入的字符会使文本无效时,过滤器应返回空字符串。
另请参阅here
关于java - 如何验证特定 int 范围的 EditTextPreference 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354511/