[英]How can I reduce if-else statements
我的代码:
if(!"".equals(et1.getText().toString())){
Toast.makeText(getActivity(), "Please enter text1", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et2.getText().toString())){
Toast.makeText(getActivity(), "Please enter text2", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et3.getText().toString())){
Toast.makeText(getActivity(), "Please enter text3", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et4.getText().toString())){
Toast.makeText(getActivity(), "Please enter text4", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et5.getText().toString())){
Toast.makeText(getActivity(), "Please enter text5", Toast.LENGTH_SHORT).show();
}
//总共有13个字段,因此将接近13个检查。 因此,仅我想知道是否有可能检查一个语句并查找哪个文件保留为空。
谢谢。
将对象(et1、2、3,...)存储在数组中,然后对其进行迭代。
您可以将textwatcher
添加到您的字段。 请参见下面的代码段。
private class GenericTextWatcher implements TextWatcher {
private GenericTextWatcher() {
}
public void afterTextChanged(Editable editable) {
if(editable.toString().equals(""))
{
Toast.makeText(UrActivity.this, "ur toast", Toast.LENGTH_LONG).show();
}
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
}
然后注册textlistener
。
editext.addTextChangedListener(new GenericTextWatcher());
在实际按键上进行验证会更快,然后再进行检查。
将其存储在List
for (EditText et : etList) {
if(!"".equals(et.getText().toString()))
}
我将实现表示必要控件的视图类(以Model-View-Controller表示法),并将使用多态性来避免这些if语句。
更新:
据我了解,这里显示了一种输入验证机制。 我将执行以下操作。
对于您的特定任务,我的解释可能比预期的要笼统。 但我认为它将对您将来有所帮助。 并且请注意,我不太精通Android API,因此您可能需要调整对某些Android API类的引用,例如表示字段的类。
因此,第一步。 声明现场原型:
abstract FieldPrototype extends AndroidFieldClass {
/**
* Checks field contents and returns true if field is ok, otherwise shows popup validation message and returns false.
* @return see method description.
*/
public abstract boolean checkField();
}
class Et1Field extends FieldPrototype {
private String value;
public Et1Field() {
super();
// your initialization code here
}
public boolean checkField() {
if (value == null || "".equals(value)) {
// show validation message specific for Et1Field class instance.
return false;
}
return true;
}
}
// do the same steps for Et2Field .. Et13Field if those fields are different,
// and implement specific validation functionality for every kind of a field.
在屏幕类中,保留此屏幕上显示的所有字段的数组。 在屏幕上的保存事件中,将save
事件发送到所有字段实例。 每个字段将调用其自己的checkField()方法并验证其自身的内容,而无需在外部显示特定的字段实现。 如果字段验证失败,您只需停止操作,然后让用户更正字段内容。
使一个函数检查空白并像这样一次调用它...
checkBlank(et1.getText().toString()), 1);
checkBlank(et2.getText().toString()), 2);
checkBlank(et3.getText().toString()), 3);..and so on
这是功能。
private void checkBlank(String edt,int pos) {
// TODO Auto-generated method stub
if(edt.equals(""))
{
Toast.makeText(getApplicationContext(), "Please enter text"+pos, Toast.LENGTH_SHORT).show();
}
}
天哪:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.