如何在ListView中的EditText中进行验证?

时间:2012-02-18 08:28:11

标签: android listview android-edittext

我在onFocusChangeListner中验证listview中的Edittext时遇到问题。

我的用户界面看起来像这样

MeterName Previous CurrentReading
Meter1    100      Here i want to type current reading

当我输入当前的读数时,它将与之前的读数进行比较。目前的阅读量不能超过上一个。如果它小于之前的那么我想提醒用户并且焦点在同一个EditBox上。

我的代码在这里:

 public void onFocusChange(View v, boolean hasFocus) {

          try {
            Previous_Reading = getArray_Meter_Reading.getJSONObject(holder.ref)
                        .getString("PrevMeterReading").toString();
            Cumulative = getArray_Meter_Reading
                    .getJSONObject(holder.ref).getString("Cumulative")
                    .toString();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



           if(!hasFocus){

               int Current=Integer.valueOf(holder.adp_Current.getText().toString());
               Previous=Integer.parseInt(Previous_Reading);
                if(Current<  Previous ){
                    AlertDialog.Builder builder = new AlertDialog.Builder(
                            context);
                    builder.setTitle("WARNING");
                    builder.setIcon(android.R.drawable.ic_dialog_alert);
                    builder.setMessage("Please Enter UserName");
                    builder.setPositiveButton("ok",
                            new DialogInterface.OnClickListener() {

                                public void onClick(DialogInterface dialog,
                                        int which) {

                                    // Caption.requestFocus();

                                }
                            });

                    AlertDialog diag = builder.create();
                    diag.show();
                }

           }

      } });

使用此代码,当我开始输入EditBox时,会显示所有字符的警报,如果之前的字符是600,我键入的内容如果我输入的当前读数为6,则会显示alertdialog然后 5再次alertdialog直到它大于以前的值。

当我点击EditText时,hasFocus为true,当我键入任何数字时,说5焦点更改为false。

任何人都可以通过提供示例代码告诉我如何对其进行验证吗?

2 个答案:

答案 0 :(得分:4)

最好在textwatcher上使用您的edittext。

 edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)   
              {
                 if(Integer.valueOf(holder.adp_Current.getText().toString()<Integer.parseInt(Previous_Reading)){
                 edittext.seterror("your error message");

            }

            @Override
    public void beforeTextChanged(CharSequence s, int start,   int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });

答案 1 :(得分:2)

看看this。然后,将这个概念扩展到您的问题,我建议:

EditText myEditText = (EditText)findViewById(R.id.first_name);
int textValue = 0 ;
try {
    textValue = Integer.parseInt(myEditText.getText().toString()) ;
catch (NumberFormatException nfe) {
    // Handle the exception
}
if (textValue < minValue) {
    myEditText.requestFocus();
    myEditText.setError( "Value entered is lower than previous value." );
}