0

我使用 InputFilter 从 editText 检查我的字符串。

 final InputFilter filter = new InputFilter() {


                @Override
                public CharSequence filter(CharSequence source, int start,
                        int end, Spanned dest, int dstart, int dend) {
                    int num = 0;
                    try {
                        num = Integer.parseInt(source.toString());
                        if (!(num > 0 && num < 30)) {
                            return "";
                        }
                    } catch (Exception e) {
                    }

                    return null;
                }
            };

        etStatDaysCount = (EditText) inflate2.findViewById(R.id.et_settings_days_to_statistics);
        etStatDaysCount.setFilters(new InputFilter[]{filter});

但我有一个问题。我想检查用户是否输入数字 <0 或 >30 我想替换此文本。这个过滤器会一一检查。因此,如果我输入数字 56,他检查数字 5,然后检查 6,因此此过滤器允许用户将数字 56 放入编辑文本中。我想检查我放在edittext中的所有字符串。因此,如果我输入 56,他应该检查 5 号,然后检查 56 号。我该怎么做?

4

2 回答 2

1

好像你在回答你自己的问题。如果问题是过滤器会一一检查数字,那么不要使用它!只要您准备好测试它并确保它符合您的标准,只需从 EditText 中获取值。

etStatDaysCount = (EditText) inflate2.findViewById(R.id.et_settings_days_to_statistics);


//when you're ready to look at the value...
String input = etStatDaysCount.getText().toString()
if(input.trim().equals("") || input.matches("\\D") || Integer.valueOf(input) < 0 || Integer.valueOf(input) > 30)
      //this is a value that you don't want
于 2013-09-19T08:42:26.897 回答
1

使用TextChangeListener. 每当对 editText 进行输入时,它就会被触发。

   etStatDaysCount = (EditText) inflate2.findViewById(R.id.et_settings_days_to_statistics);

   etStatDaysCount.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3     ) {

                    // you can check every number/alphabet of input here
}

如果您不想检查输入中的每个字符,您可以随时执行以下操作:

String yourInput = etStatDaysCount.getText().toString();

if(Integer.valueOf(yourInput) <0 && Integer.valueOf(yourInput) >30 )
      // undesired value

希望这可以帮助

于 2013-09-19T08:46:33.563 回答