java - 如何验证特定 int 范围的 EditTextPreference 值

标签 java android preference

我想验证 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/

相关文章:

java - 使用插件与 appView.addJavascriptInterface 的不同之处

java - Android 将图像添加到首选项?

android - 我可以使用 android.preference 包执行数据库特定操作吗?

java - 模拟长时间运行的 Oracle 数据库查询

java.lang.ClassCastException : org. primefaces.model.DefaultUploadedFile 无法转换为 java.io.File

Android gradle 任务 Google Appengine

android - 偏好铃声默认值

java - 在 JSON 字符串中插入节点

java - 为什么不为字符串散列表简单地使用此Collision-Less函数呢? (包括在下面)

java - 如何在android中获取使用gps的已安装应用程序列表?