如何在EditText的值中强制执行数字条件?

时间:2012-03-01 12:53:01

标签: java android

如何在我的EditText中添加条件,EditText适用于年龄,应该是一个数字。

所以我想:

  1. put条件允许用户插入1到100之间的数字
  2. 如果用户插入超过100,则EditText将自动为100
  3. 将EditText值检索为字符串
  4. 这是我的代码:

    package mm.app.pkg;
    
    import android.app.Activity;     import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.text.InputFilter;
    import android.text.Spanned;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.RadioGroup;
    import android.widget.RadioGroup.OnCheckedChangeListener;
    import android.widget.Spinner;
    import android.widget.TextView;
    
    public class CreateNewForm extends Activity implements OnItemSelectedListener, InputFilter         {
    
    
    Button Browse;
    ImageView  CasePic;
    Spinner CaseDurationH, CaseDurationM;
    TextView tesst;
    RadioGroup GenderSelection;
    EditText CaseName, CaseClothes, CaseMoreInfo, CaseAge;
    Button Next;
    //For Browsering Picture 
     private static final int SELECT_PICTURE = 1;
    private String selectedImagePath;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) 
    {
    
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_new_form);
    
    //To Call initializer Function 
    initializer();
    
    //j list
    
    // 1-For Uploading Picture
    Browse.setOnClickListener(new View.OnClickListener() {
    
        public void onClick(View v) {
            // TODO Auto-generated method stub
             // in onCreate or any event where your want the user to
            // select a file
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent,
                    "Select Picture"), SELECT_PICTURE);
        }
    });
    
    // 1-Name
    final MyCase case1 = new MyCase();
    case1.setName(CaseName.getText().toString());
    
    // 2-Gender For Group Radio
    GenderSelection.clearCheck();
    GenderSelection.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
        public void onCheckedChanged(RadioGroup group, int checkedId) {
             switch (checkedId) {
            case R.id.radio0:
                case1.setGender("Male");
                break;
            case R.id.radio1:
                case1.setGender("Female");
                break;
            default:
                break;
            }
    
        }
         });
    
       //3-Age
       String age = CaseAge.getText().toString();
    
       private int min, max;
    
       public void InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }
    
      public void InputFilterMinMax(String min, String max) {
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(max);
    }
    
    
         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 (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }     
        return "";
       }
    
        private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
       }
         CaseAge.setFilters(new InputFilter[]{ new InputFilterMinMax("1", "100"))};
    
    
       /*int tstnum =case1.getAge();
       tesst.setText(tstnum); */
    
        //4-Duration Time
       ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, R.array.feedbacktypelist, android.R.layout.simple_spinner_item);
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      CaseDurationH.setAdapter(adapter); 
    
    
      //5-Case Clothes
     case1.setClothes(CaseClothes.getText().toString());
    
     //6-Case More Information
     case1.setMoreInfo(CaseMoreInfo.getText().toString());
    
     //Move to 2nd form page
     Next= (Button)findViewById(R.id.Next2);
     Next.setOnClickListener(new View.OnClickListener() {
    
        public void onClick(View v) { 
            switch (v.getId()) { 
            case R.id.Next2:
                try
                {
                     Intent k = new Intent(CreateNewForm.this, CreateNewForm_2.class);
    
                     startActivity(k);
    
                }catch(Exception e){
    
                }
    
                break;
    
            }
        }
    
    
    
    
    
    
       });
    
    
    
       //Spinner
       CaseDurationH.setOnItemSelectedListener(new OnItemSelectedListener() {
          int i =CaseDurationH.getSelectedItemPosition();
          public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
              int i = CaseDurationH.getSelectedItemPosition();
    
             if(i==2){
                 CaseDurationM.setEnabled(false);
            }
             String str = parent.getSelectedItem().toString();
    
             if(str.equals("hr0"))
                    {
                CaseDurationM.setEnabled(true);
                }
    
             if(str.equals("hr1"))
                    {
                CaseDurationM.setEnabled(true);
                 }
    
    
               if(str.equals("hr2"))
                       {
                   CaseDurationM.setEnabled(false);  
                   }
           }
           public void onNothingSelected(AdapterView<?> arg0) {
              // TODO Auto-generated method stub
    
           } });
    
     }
    
    
     // To initialize the variables 
     private void initializer() {
       // TODO Auto-generated method stub
       //This information will be filled by a user
               //CasePic = (ImageView) findViewById(R.id.imageView1);
               CaseName= (EditText) findViewById(R.id.caseNm);
               GenderSelection= (RadioGroup) findViewById(R.id.radioGroup1);
               CaseAge= (EditText) findViewById(R.id.caseaage);
               tesst= (TextView) findViewById(R.id.textView8);
               CaseDurationH= (Spinner) findViewById(R.id.Shr);
               CaseDurationM= (Spinner) findViewById(R.id.Smin);
                CaseClothes= (EditText) findViewById(R.id.caseClothes);
                CaseMoreInfo= (EditText) findViewById(R.id.caseMrInfo);
                CasePic = (ImageView) findViewById(R.id.casepic);
                Browse = (Button) findViewById(R.id.browseCasePic);
      }
    
    
    //For Uploading Picture
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                selectedImagePath = getPath(selectedImageUri);
            }
         }
    }
    
     //For Uploading Picture
     public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
       Cursor cursor = managedQuery(uri, projection, null, null, null);
       int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
     }
    
    
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
        // TODO Auto-generated method stub
    
    }
    
    
    public void onNothingSelected(AdapterView<?> arg0) {
      // TODO Auto-generated method stub
    
    }
    
    
    public CharSequence filter(CharSequence source, int start, int end,
          Spanned dest, int dstart, int dend) {
       // TODO Auto-generated method stub
       return null;
     }
    
    
     }
    

3 个答案:

答案 0 :(得分:0)

首先 - 手动进行这类检查并不是一个好主意 - 看看,如果您使用的组件--ExitText支持某种内置验证器。

然后 - 毕竟,如果你想自己编写验证代码 - 这是一个例子:

EditText CAge;
CaseAge= (EditText) findViewById(R.id.caage);
String age = CaseAge.getText().toString();
  if (Integer.parseInt(age) < 1) {
      //handle invalid value
     } else {
         if ((Integer.parseInt(age) > 100){
            CaseAge.setText("100");
              }
            }

希望这有帮助。

答案 1 :(得分:0)

尝试下面的代码实现textWatcher,该代码侦听edittext的文本事件,以便您可以在键入文本时控制用户。 你可以通过

获得editText的值
String value= edt.getTest().toString();

edt.addTextChangedListener(new TextWatcher() {

             public void onTextChanged(CharSequence s, int start, int before, int count) {


             }
             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                 previous_text=s.toString();
                }
                  public void afterTextChanged(Editable s) {   
                Integer.parse
                      int val= Integer.parseInt(s.toString());
                       if(val>100)
                            {
                             edt.setText("100");
                            }
                          if(val<0)
                            {
                             edt.setText("");
                            }

             }
               });

答案 2 :(得分:0)

这是你修复的类没有导入插入你的导入并尝试它。 希望它有所帮助。

编辑:带有一个EditText和InputFilter类的文本活动的简化版本,它确实有效。

public class CreateNewForm extends Activity {
    EditText  CaseAge;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout
                 ll = new LinearLayout(this);
        CaseAge = new EditText(this) ;
        CaseAge.setWidth(69);
        ll.addView(CaseAge);
        setContentView(ll);
        CaseAge.setFilters(new InputFilter[]{new InputFilterMinMax(1, 100)});
    }
    class InputFilterMinMax implements InputFilter {
        private int min, max;
        public InputFilterMinMax(int min, int max) {
            this.min = min;
            this.max = max;
        }
        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 (isInRange(min, max, input))
                    return null;
            } catch (NumberFormatException nfe) {
            }
            return "";
        }

        private boolean isInRange(int a, int b, int c) {
            return b > a ? c >= a && c <= b : c >= b && c <= a;
        }
    }
}

public class CreateNewForm extends Activity implements OnItemSelectedListener {

    Button Browse;
    ImageView CasePic;
    Spinner CaseDurationH, CaseDurationM;
    TextView tesst;
    RadioGroup GenderSelection;
    EditText CaseName, CaseClothes, CaseMoreInfo, CaseAge;
    Button Next;
    //For Browsering Picture
    private static final int SELECT_PICTURE = 1;
    private String selectedImagePath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_new_form);
//To Call initializer Function
        CaseName = (EditText) findViewById(R.id.caseNm);
        GenderSelection = (RadioGroup) findViewById(R.id.radioGroup1);
        CaseAge = (EditText) findViewById(R.id.caseaage);
        tesst = (TextView) findViewById(R.id.textView8);
        CaseDurationH = (Spinner) findViewById(R.id.Shr);
        CaseDurationM = (Spinner) findViewById(R.id.Smin);
        CaseClothes = (EditText) findViewById(R.id.caseClothes);
        CaseMoreInfo = (EditText) findViewById(R.id.caseMrInfo);
        CasePic = (ImageView) findViewById(R.id.casepic);
        Browse = (Button) findViewById(R.id.browseCasePic);

        final MyCase case1 = new MyCase();
        case1.setName(CaseName.getText().toString());

        GenderSelection.clearCheck();
        GenderSelection.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.radio0:
                        case1.setGender("Male");
                        break;
                    case R.id.radio1:
                        case1.setGender("Female");
                        break;
                    default:
                        break;
                }
            }
        });

        Browse.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // in onCreate or any event where your want the user to
                // select a file
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent,
                        "Select Picture"), SELECT_PICTURE);
            }
        });

        CaseAge.setFilters(new InputFilter[]{new InputFilterMinMax(1, 100)});
        CaseAge.setInputType(InputType.TYPE_CLASS_NUMBER);
//String age = CaseAge.getText().toString(); //not used anywhere

// CaseAge.setFilters(new InputFilter[]{ new InputFilterMinMax("1", "100")}); //this one can be used too
        //4-Duration Time
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.feedbacktypelist, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        CaseDurationH.setAdapter(adapter);
        case1.setClothes(CaseClothes.getText().toString());
        case1.setMoreInfo(CaseMoreInfo.getText().toString());
        Next = (Button) findViewById(R.id.Next2);
        Next.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.Next2:
                        try {
                            Intent k = new Intent(CreateNewForm.this, CreateNewForm_2.class);
                            startActivity(k);
                        } catch (Exception e) {
                        }
                        break;
                }
            }
        });

        //Spinner
        CaseDurationH.setOnItemSelectedListener(new OnItemSelectedListener() {
            int i = CaseDurationH.getSelectedItemPosition();

            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                int i = CaseDurationH.getSelectedItemPosition();

                if (i == 2) {
                    CaseDurationM.setEnabled(false);
                }
                String str = parent.getSelectedItem().toString();

                if (str.equals("hr0")) {
                    CaseDurationM.setEnabled(true);
                }

                if (str.equals("hr1")) {
                    CaseDurationM.setEnabled(true);
                }
                if (str.equals("hr2")) {
                    CaseDurationM.setEnabled(false);
                }
            }

            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                selectedImagePath = getPath(selectedImageUri);
            }
        }
    }

    //For Uploading Picture
    public String getPath(Uri uri) {
        String[] projection = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }


    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                               long arg3) {
        // TODO Auto-generated method stub

    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

    class InputFilterMinMax implements InputFilter {

        private int min, max;

        public InputFilterMinMax(int min, int max) {
            this.min = min;
            this.max = max;
        }

        public InputFilterMinMax(String min, String max) {
            this.min = Integer.parseInt(min);
            this.max = Integer.parseInt(max);
        }


        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 (isInRange(min, max, input))
                    return null;
            } catch (NumberFormatException nfe) {
            }
            return "";
        }

        private boolean isInRange(int a, int b, int c) {
            return b > a ? c >= a && c <= b : c >= b && c <= a;
        }
    }

}