我在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。
任何人都可以通过提供示例代码告诉我如何对其进行验证吗?
答案 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." );
}